我还在学习,所以请忍受我。我一直在试图解决这个问题,但是没有找到我正在寻找的东西。
My Product.csv file looks like this.
111 ; Info1 ; Description 1 ; Remarks1
123 ; Info1 ; Description 1 ; Remarks1
156 ; Info2 ; Description 2 ; Remarks2
124 ; Info3 ; Description 3 ; Remarks3
I would like to combine entries that are similar like this.
111, 123 ; Info1 ; Description 1 ; Remarks1
156 ; Info2 ; Description 2 ; Remarks2
124 ; Info3 ; Description 3 ; Remarks3
From here i can manipulate my csv file in Excel using vba to insert into a quotation.
这就是我想使用Python实现的目标。我m脚从哪里开始。我想我需要通过打开文件然后读取csv文件来进行处理。之后,将变量分配给#(即111),信息,说明,备注。然后通过变量排序,并像#一样组合。然后将其写回到文件中。如果您需要我进行校准,请告诉我。
这是itertools.groupby的任务
编辑:我重构了第一个版本以提高可读性
# file group_by_trailing_py2.py
import os
import csv
from itertools import groupby
DELIM=';'
IN_FILENAME = 'My Product.csv'
OUT_FILENAME = 'My Product.grouped.csv'
############ skip this if you run it against productive data ###############
DATA = '''111 ; Info1 ; Description 1 ; Remarks1
123 ; Info1 ; Description 1 ; Remarks1
156 ; Info2 ; Description 2 ; Remarks2
124 ; Info3 ; Description 3 ; Remarks3'''
if (os.environ.get('WITH_DATA_GENERATION')):
open(IN_FILENAME,'w').write(DATA)
##############################################################################
keyfunc = lambda row: row[1:]
with open(IN_FILENAME) as csv_file:
rows = sorted(csv.reader(csv_file, delimiter=DELIM), key=keyfunc)
it = map(lambda t: [", ".join(v[0].strip() for v in t[1]) + " "] + t[0],
groupby(rows, key=keyfunc))
with open(OUT_FILENAME, 'w') as csv_file:
writer = csv.writer(csv_file, delimiter=DELIM)
for row in it:
writer.writerow(row)
如果与
WITH_DATA_GENERATION=1 python3 group_by_trailing_pk2.py
它产生My Product.grouped.csv
的内容:
111, 123 ; Info1 ; Description 1 ; Remarks1
156 ; Info2 ; Description 2 ; Remarks2
124 ; Info3 ; Description 3 ; Remarks3
由于您已有工作量,因此您将不会设置WITH_DATA_GENERATION并删除'####...'
注释行之间(包括注释行)的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句