Guest User

Untitled

a guest
Nov 15th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.15 KB | None | 0 0
  1. | sku | article_name |
  2. | 1 | MyArticle |
  3.  
  4. | article_name | another_column | sku |
  5. | MyArticle | | 1 |
  6.  
  7. #!/usr/bin/env python
  8. # -*- coding: latin_1 -*-
  9.  
  10. import csv
  11. import argparse
  12. import sys
  13.  
  14.  
  15. header_mappings = {'attr_artikel_bezeichnung1': 'ARTICLE LABEL',
  16. 'sku': 'ARTICLE NUMBER',
  17. 'Article label locale': 'Article label locale',
  18. 'attr_purchaseprice': 'EK-Preis',
  19. 'attr_salesPrice': 'EuroNettoPreis',
  20. 'attr_salesunit': 'Einheit',
  21. 'attr_salesvatcode': 'MwSt.-Satz',
  22. 'attr_suppliercode': 'Lieferantennummer',
  23. 'attr_suppliersitemcode': 'Artikelnummer Lieferant',
  24. 'attr_isbatchitem': 'SNWarenausgang'}
  25.  
  26. row_mapping = {'Einheit': {'pc': 'St.'},
  27. 'MwSt.-Satz': {'3': '19'}}
  28.  
  29.  
  30. def remap_header(header):
  31. for h_map in header_mappings:
  32. if h_map in header:
  33. yield header_mappings.get(h_map), header.get(h_map)
  34.  
  35.  
  36. def map_header(header):
  37. for elem in header:
  38. yield elem, header.index(elem)
  39.  
  40.  
  41. def read_csv(filename):
  42. with open(filename, 'rb') as incsv:
  43. csv_reader = csv.reader(incsv, delimiter=';')
  44. for r in csv_reader:
  45. yield r
  46.  
  47.  
  48. def add_header(header, fields=()):
  49. for f in fields:
  50. header.append(f)
  51.  
  52. return header
  53.  
  54.  
  55. def duplicate(csv_row, header_name, fields):
  56. csv_row[new_csv_header.index(fields)] = csv_row[new_csv_header.index(header_name)]
  57. return csv_row
  58.  
  59.  
  60. def do_new_row(csv_row):
  61. for header_name in new_csv_header:
  62. for r_map in row_mapping:
  63. row_content = csv_row[mapped_header.get(r_map)]
  64. if row_content in row_mapping.get(r_map):
  65. csv_row[mapped_header.get(r_map)] = row_mapping.get(r_map).get(row_content)
  66. try:
  67. yield csv_row[mapped_header.get(header_name)]
  68. except TypeError:
  69. continue
  70.  
  71.  
  72. if __name__ == '__main__':
  73.  
  74. parser = argparse.ArgumentParser()
  75. parser.add_argument('-i', '--infile', metavar='CSV')
  76. parser.add_argument('-o', '--outfile', metavar='CSV')
  77.  
  78. args = parser.parse_args()
  79. arguments = vars(args)
  80. if len(sys.argv[1:]) == 0:
  81. parser.print_usage()
  82. sys.exit(0)
  83.  
  84. # print arguments
  85. # parse_csv(**arguments)
  86. """
  87. """
  88. csv_reader_iter = read_csv(arguments.get('infile'))
  89.  
  90. # neuer csv header
  91. new_csv_header = list()
  92. csv_header = next(csv_reader_iter)
  93. for h in csv_header:
  94. if h in header_mappings:
  95. new_csv_header.append(header_mappings.get(h))
  96.  
  97. # print new_csv_header
  98. new_csv_header = add_header(new_csv_header, ('Article label locale', 'Nummer'))
  99. mapped_header = dict(remap_header(dict(map_header(csv_header))))
  100. # print mapped_header
  101.  
  102. with open(arguments.get('outfile'), 'wb') as outcsv:
  103. csv_writer = csv.writer(outcsv, delimiter=';')
  104. csv_writer.writerow(new_csv_header)
  105. for row in csv_reader_iter:
  106. row = list(do_new_row(row))
  107. delta = len(new_csv_header) - len(row)
  108. if delta > 0:
  109. row = row + (delta * [''])
  110.  
  111. # duplicate(row, 'SNWarenausgang', 'SNWareneingang')
  112. # duplicate(row, 'SNWarenausgang', 'SNWareneingang')
  113. csv_writer.writerow(row)
  114.  
  115.  
  116. print "Done."
  117. """
  118. print new_csv_header
  119. for row in csv_reader_iter:
  120. row = list(do_new_row(row))
  121. delta = len(new_csv_header) - len(row)
  122. if delta > 0:
  123. row = row + (delta * [''])
  124.  
  125. duplicate(row, 'Herstellernummer', 'Nummer')
  126. duplicate(row, 'SNWarenausgang', 'SNWareneingang')
  127. print row
  128. """
  129.  
  130. def read_csv (filename):
  131. with open(filename) as incsv:
  132. reader = csv.DictReader(incsv, delimiter=';')
  133. for r in reader:
  134. yield r
  135.  
  136. columns = ['article_name', 'another_column', 'sku']
  137.  
  138. with open('newfile.csv', 'w+') as f:
  139. writer = csv.DictWriter(f, columns, delimiter=';')
  140. writer.writeheader()
  141.  
  142. for row in read_csv('oldfile.csv'):
  143. # add a property
  144. row['another_column'] = 'foo'
  145.  
  146. # write row (using the order specified in columns)
  147. writer.writerow(row)
Add Comment
Please, Sign In to add comment