Python ndiff结果不正确

时间:2015-09-09 15:52:56

标签: python

我正在尝试将CS​​V文件与主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,,,

1 个答案:

答案 0 :(得分:0)

我认为您的问题可能是因为最后一行

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_date

与     ID,技术,类型,work_date \ n

在Windows上,您可能看不到额外的空行,因为Windows使用\ r \ n作为新行。