Prepis.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import json
  2. import sys
  3. import csv
  4. def nacti(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 ulozit(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 odstranit(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 nactenicsv(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. odstranit(missing_jsons, missing)
  32. odstranit(overstay_jsons, overstay)
  33. ulozit(missing, "pridat")
  34. ulozit(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 = nacti(path_pattern)
  43. target = nacti(path_target)
  44. nactenicsv(pattern, target)
  45. if __name__ == '__main__':
  46. main()
  47. sys.exit(0)