fork download
  1. #!/bin/bash
  2.  
  3. # ideone boilerplate - we can't write files in the home directory;
  4. # so create a temporary directory for our files instead
  5. t=$(mktemp -d -t ideone.XXXXXXXXXXXX) || exit
  6. trap 'rm -rf "$t"' ERR EXIT
  7. cd "$t"
  8.  
  9. cat <<\: >zulu_db_capcodes.txt
  10. capcode,discipline,region,location,description,remark
  11. 000400001,Brandweer,Groningen,Groningen,Regionaal,Pelotonscommandant Logistiek/Water (Noord)
  12. 000400002,Brandweer,Groningen,Groningen,,
  13. 000400003,Brandweer,Groningen,Groningen,Regionaal,Pelotonscommandant Logistiek/Water) (Oost)
  14. 000100000,Brandweer,Amsterdam-Amstelland,Amsterdam-Amstelland,Aalsmeer,Postalarm
  15. 000100001,Brandweer,Amsterdam-Amstelland,Amsterdam-Amstelland,,
  16. 000100002,Brandweer,Amsterdam-Amstelland,Amsterdam-Amstelland,,Banaanzulu
  17. 000100003,Brandweer,Amsterdam-Amstelland,Amsterdam-Amstelland,,
  18. :
  19.  
  20. cat <<\: >bommel_db_capcodes.txt
  21. capcode,discipline,region,location,description,remark
  22. 000100000,Brandweer,Amsterdam-Amstelland,,banaanProefalarm,
  23. 000100001,Brandweer,Amsterdam-Amstelland,Aalsmeer,Bevelvoerders,
  24. 000100004,Brandweer,Amsterdam-Amstelland,Aalsmeer,Korpsalarm,
  25. :
  26.  
  27. cat <<\: >demo.py
  28. #!/usr/bin/env python3
  29. import csv
  30.  
  31.  
  32. fields = ['capcode', 'discipline', 'region', 'location', 'description', 'remark']
  33.  
  34. with open('bommel_db_capcodes.txt', 'r') as readFile_bommel, \
  35. open('results.csv', 'w') as results, \
  36. open('zulu_db_capcodes.txt', 'r') as readFile_zulu:
  37.  
  38. master = csv.DictReader(readFile_zulu, fieldnames=fields)
  39. update = csv.DictReader(readFile_bommel, fieldnames=fields)
  40. writer = csv.DictWriter(results, fieldnames=fields)
  41.  
  42. # Saves and skips header to output file
  43. writer.writerow(next(master))
  44.  
  45. # Skip header from updates
  46. next(update)
  47.  
  48. # Read, remember, and write updated lines
  49. seen = set()
  50. for row in update:
  51. writer.writerow(row)
  52. seen.add(row['capcode'])
  53.  
  54. for row in master:
  55. if row['capcode'] not in seen:
  56. writer.writerow(row)
  57. :
  58.  
  59. python3 demo.py
  60.  
  61. nl results.csv
Success #stdin #stdout 0.03s 9600KB
stdin
Standard input is empty
stdout
     1	capcode,discipline,region,location,description,remark
     2	000100000,Brandweer,Amsterdam-Amstelland,,banaanProefalarm,
     3	000100001,Brandweer,Amsterdam-Amstelland,Aalsmeer,Bevelvoerders,
     4	000100004,Brandweer,Amsterdam-Amstelland,Aalsmeer,Korpsalarm,
     5	000400001,Brandweer,Groningen,Groningen,Regionaal,Pelotonscommandant Logistiek/Water (Noord)
     6	000400002,Brandweer,Groningen,Groningen,,
     7	000400003,Brandweer,Groningen,Groningen,Regionaal,Pelotonscommandant Logistiek/Water) (Oost)
     8	000100002,Brandweer,Amsterdam-Amstelland,Amsterdam-Amstelland,,Banaanzulu
     9	000100003,Brandweer,Amsterdam-Amstelland,Amsterdam-Amstelland,,