我正在尝试将CSV文件与主CSV文件进行比较,并添加具有任何更改的主文件。当我运行程序时,我得到了意想不到的结果。
Python代码:
import glob
import difflib
final = "Z:\\_data\\master.csv"
folder = "Z:\\_data\\"
for file in glob.glob( folder + "*sample*.csv"):
#print file
diff = difflib.ndiff(open(final).readlines(),open(file).readlines())
delta1 = ''.join(x[2:] for x in diff if x.startswith('+ '))
#print delta1
if delta1 != "":
with open(final, 'ab') as new_file:
new_file.write("\n" + delta1)sample1.csv
id,tech,type,work_date
C-40,,,
C-33,,,
C-32,,,sample2.csv
id,tech,type,work_date
W-37,ty,Waterous,8-12-15
W-38,ty,Dresser,8-12-15
W-5,ty,Waterous,9-1-15
C-44,tf,Waterous,xx
P-40,,,master.csv
id,tech,type,work_date当我第一次运行程序时,主文件看起来像这样:
id,tech,type,work_date
id,tech,type,work_date
C-40,,,
C-33,,,
C-32,,,
W-37,ty,Waterous,8-12-15
W-38,ty,Dresser,8-12-15
W-5,ty,Waterous,9-1-15
C-44,tf,Waterous,xx
P-40,,,当我重复运行该程序时,我得到以下结果:
id,tech,type,work_date
id,tech,type,work_date
C-40,,,
C-33,,,
C-32,,,
W-37,ty,Waterous,8-12-15
W-38,ty,Dresser,8-12-15
W-5,ty,Waterous,9-1-15
C-44,tf,Waterous,xx
P-40,,,
C-32,,,
P-40,,,正如你所看到的,上面的结果有重复的行。
我原以为结果是
id,tech,type,work_date
C-40,,,
C-33,,,
C-32,,,
W-37,ty,Waterous,8-12-15
W-38,ty,Dresser,8-12-15
W-5,ty,Waterous,9-1-15
C-44,tf,Waterous,xx
P-40,,,发布于 2015-09-10 01:40:41
我想你的问题可能是因为最后一行
new_file.write("\n" + delta1)尝试删除"\n",仅
new_file.write(delta1)我已经在Linux上测试过你的代码。它生成了一个额外的空行
id,tech,type,work_date
C-40,,,
C-33,,,
C-32,,,
W-37,ty,Waterous,8-12-15
W-38,ty,Dresser,8-12-15
W-5,ty,Waterous,9-1-15
C-44,tf,Waterous,xx
P-40,,,在Windows计算机上,它的行为可能会有所不同。这可能是造成差异的原因。比如你比较
id,tech,type,work_dateid、技术、类型、work_date\n
在windows上,您可能看不到额外的空行,因为windows使用\r\n作为新行。
https://stackoverflow.com/questions/32484155
复制相似问题