我是python的新手,我正在尝试从我的家具软件中获取零件清单,并以更好的方式组织它。我从一个csv文件开始,将每个部分写为自己的项目。所以,如果我有2个椅子腿是同一件,我得
Leg 1,x,y,z,notes
Leg 2,x,y,z,notes
我想最终得到的是
2,Leg 1,x,y,z,notes
其中第一列现在是数量,并且只要python看到具有相同x,y,z,notes的新行,就会更新。
现在我有一个代码,我从其他帖子中找到了大部分代码,可以编写一个消除重复的文件,而且我似乎应该能够相对容易地添加数量,但我不能完全想办法。我查看了其他帖子,但没有看到有关在同一文件中更新的任何内容,只将一个文件与另一个文件进行比较 这是我用来消除重复的代码:
import csv
input_file = 'Brook Field 4 Drawer.csv'
output_file = 'updated_quantities.csv'
with open(input_file, 'rb') as infile, open(output_file, 'wb') as outfile:
incsv = csv.reader(infile)
outcsv = csv.writer(outfile)
pieces = set()
for row in incsv:
piece = tuple(row[1:4])
if piece not in pieces:
outcsv.writerow(row)
pieces.add(piece)
有人可以提出解决方案吗?我现在还在正确的轨道上吗?
答案 0 :(得分:0)
你走了:
from itertools import groupby
csv_content = \
[['Leg', '1', 'x', 'y', 'z', 'notes'],
['Leg', '2', 'x', 'y', 'z', 'notes'],
['Leg', '3', 'abc', 'y', 'z', 'notes']]
groups = {str(l[2:]): l for l in csv_content}
for key, group in groupby([str(e[2:]) for e in csv_content]):
groups[key].insert(0, len(list(group)))
csv_read_output = list(groups.itervalues())
部分灵感来自:How to count the frequency of the elements in a list?
答案 1 :(得分:0)
不太对劲。而不是“设置”你需要一个字典我想,所以你可以在找到项目时继续增加一个计数器。以下是我的建议:
pieces = {}
for row in incsv:
piece = tuple(row)
if piece not in pieces:
pieces[piece] = 0
else:
pieces[piece] += 1
for item, count in pieces.items():
row = (count,) + item
outcsv.writerow(row)