首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python ndiff结果不正确

Python ndiff结果不正确
EN

Stack Overflow用户
提问于 2015-09-09 23:52:56
回答 1查看 146关注 0票数 0

我正在尝试将CSV文件与主CSV文件进行比较,并添加具有任何更改的主文件。当我运行程序时,我得到了意想不到的结果。

Python代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
id,tech,type,work_date
C-40,,,
C-33,,,
C-32,,,

sample2.csv

代码语言:javascript
复制
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

代码语言:javascript
复制
id,tech,type,work_date

当我第一次运行程序时,主文件看起来像这样:

代码语言:javascript
复制
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,,,

当我重复运行该程序时,我得到以下结果:

代码语言:javascript
复制
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,,,

正如你所看到的,上面的结果有重复的行。

我原以为结果是

代码语言:javascript
复制
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,,,
EN

回答 1

Stack Overflow用户

发布于 2015-09-10 01:40:41

我想你的问题可能是因为最后一行

代码语言:javascript
复制
new_file.write("\n" + delta1)

尝试删除"\n",仅

代码语言:javascript
复制
new_file.write(delta1)

我已经在Linux上测试过你的代码。它生成了一个额外的空行

代码语言:javascript
复制
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计算机上,它的行为可能会有所不同。这可能是造成差异的原因。比如你比较

代码语言:javascript
复制
id,tech,type,work_date

id、技术、类型、work_date\n

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32484155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档