【发布时间】:2014-04-21 08:45:51
【问题描述】:
此脚本比较两个 csv 文件...有两列如果 sample1.csv 和 sample2.csv 有超过 2 列或 1 列,请帮我修改此脚本。
f1_in = open("sample1.csv","r")
next(f1_in,None)
f1_dict = {}
for line in f1_in:
l = line.split(',')
f1_dict[l[0]. strip()] = l[1]. strip()
l.sort()
f1_in.close()
f2_in = open("sample2.csv","r")
next(f2_in,None)
f2_dict = {}
for line in f2_in:
l = line.split(',')
f2_dict[l[0]. strip()] = l[1]. strip()
l.sort()
f2_in.close()
f_same = open("same.txt","w")
f_different = open("different.txt","w")
for k1 in f1_dict.keys():
if k1 in f2_dict.keys() \
and f2_dict[k1] == f1_dict[k1]:
f_same.write("{0}, {1}\n". format(str(k1)+" "+str(f1_dict[k1]),
str(k1)+" "+str(f2_dict[k1])))
elif not k1 in f2_dict.keys():
f_different.write("{0}, {1}\n". format(str(k1)+" "+str(f1_dict[k1]),
"------"))
elif not f2_dict[k1] == f1_dict[k1]:
f_different.write("{0}, {1}\n". format(str(k1)+" "+str(f1_dict[k1]),
str(k1)+" "+str(f2_dict[k1])))
f_same.close()
f_different.close()
例如:如果我的源文件具有名称和薪水作为标题,其值为 A 20000 B 15000 C 10000 D 10000,而目标文件也具有名称和薪水的标题具有值 A 40000 D 10000 B 15000 C 10000 E 8000.. .my 输出应该是不同的行:A 20000 A 40000 D 10000 -----(目标中没有文件)-----(源中没有文件)E 8000 和常用行为 B 15000 B 15000,C 10000 C 10000
【问题讨论】:
-
那么在这些情况下您有什么问题?您是否收到错误或意外输出?到目前为止,您尝试了哪些使代码更通用的方法?
-
Hy...jonrshape 如果我在源和目标中只有两列要比较,我得到它是正确的...如果有 1 列和超过 2 列也...只是采取只有两列用于比较...
-
所以,再说一遍; 到目前为止,您尝试了什么?您认为哪些代码位与列数相关?您认为哪种数据结构适合处理任意数量的列?
-
我对 python 还是很陌生,即使这段代码我只是从 stackoverflow 得到的......我猜从 f1_dict.keys() 中的 k1 开始进行比较的最后一部分:是变化的地方应该读取n列...
-
我建议您花更多的精力来理解您现在拥有的代码。输入一些
prints,弄清楚发生了什么,然后你就可以弄清楚如何修改它。这不是代码编写服务。
标签: python csv comparison