类似的东西呢:
def duplines(csv_least_cols, csv_most_cols):
rowset = set()
with open(csv_least_cols) as csv1:
r = csv.reader(csv1)
csv1_cols = next(r)
for row in r:
rowset.add(tuple(row))
with open(csv_most_cols) as csv2:
dr = csv.DictReader(csv2)
for drow in dr:
refcols = tuple(drow[c] for c in csv1_cols)
if refcols in rowset: yield csv1_cols, refcols, drow
您可以在循环中调用它并执行您想要的任何格式化 - 这个生成器处理底层逻辑,将格式化任务分离给它的调用者。
因此,例如,要获得您想要的 CSV1,CSV2 (H1:C01,H2:23,H4:F(H3:data)) 样式输出,您可以...:
def formatit(csv_least, csv_most):
out_start = '{},{} ('.format(csv_least, csv_most)
for c1cols, refvals, c2dict in duplines(csv_least, csv_most):
out_middle = []
for c, v in zip(c1cols, refvals):
out_middle.append('{}:{}'.format(c, v))
out_end = []
for c in c2dict:
if c in c1cols: continue
out_end.append('{}:{}'.format(c, c2dict[c]))
out = '{}{}({}))'.format(out_start, ','.join(out_middle), ','.join(out_end))
print(out)
您会注意到格式化工作比实际逻辑复杂得多(因此更有可能隐藏错误:-),这就是为什么我将您所需的格式称为“特殊”。
但我希望这至少可以帮助您入门(您可以分别尝试每个功能,确保逻辑符合您的要求,然后再担心格式:-)。