csv_check.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import json
  2. import sys
  3. import csv
  4. def load(path):
  5. data = []
  6. with open(path, 'r', encoding='utf8') as fp:
  7. reading = csv.DictReader(fp)
  8. for row in reading:
  9. data.append(row['JSON'])
  10. return data
  11. def save(saving_csv, name_csv):
  12. with open(name_csv + '.csv', 'w', encoding= 'utf8', newline='') as f:
  13. writer = csv.DictWriter(f, fieldnames=['JSON'])
  14. writer.writeheader()
  15. for radek in saving_csv:
  16. writer.writerow({'JSON': radek})
  17. def delete(csv_json, clear_json):
  18. for s in csv_json:
  19. if isinstance(s, str) and ',' in s:
  20. idx = s.rfind(',')
  21. clear_json.add(s[:idx])
  22. else:
  23. clear_json.add(s)
  24. def loadcsv(pattern_csv, target_csv):
  25. missing = set()
  26. overstay = set()
  27. pattern_jsons = set(json.dumps(json.loads(x), sort_keys=True) for x in pattern_csv)
  28. target_jsons = set(json.dumps(json.loads(x), sort_keys=True) for x in target_csv)
  29. missing_jsons = pattern_jsons - target_jsons
  30. overstay_jsons = target_jsons - pattern_jsons
  31. delete(missing_jsons, missing)
  32. delete(overstay_jsons, overstay)
  33. save(missing, 'pridat')
  34. save(overstay, 'odebrat')
  35. def main():
  36. if len(sys.argv) < 3:
  37. print('Chybi cesta k csv souborum.', file=sys.stderr)
  38. print('Zadejte takto: <nazev_programu.py> <cesta k vzorove.csv> <cesta k cilove.csv>', file=sys.stderr)
  39. sys.exit(1)
  40. path_pattern = sys.argv[1]
  41. path_target = sys.argv[2]
  42. pattern = load(path_pattern)
  43. target = load(path_target)
  44. loadcsv(pattern, target)
  45. if __name__ == '__main__':
  46. main()
  47. sys.exit(0)