逐行比较两个文件使用python 3.5将每一行的差异输出到新文件中的新行



这种类型的问题已经被问了好几次,但我似乎找不到完全相同的场景,并且正在使用python 3。(在我的情况下是3.5)

我有两个文件txt或csv。我需要比较每一行,并将差异输出到新文件中的新行。

这是我到目前为止所尝试的:这很接近,但我不知道如何将每一行的差异变成一行,我似乎只能将每个单词变成一行或所有内容都变成一行。

a = open('test1.txt').read().split()
b = open('test2.txt').read().split()
c = [x for x in b if x not in a]
open('test3.txt', 'wt').write('n'.join(c)+'n')

在.join之前的\n使每个单词都成为一个新行,我不希望每个差异都成为一行,我希望同一行上一行的所有差异。我希望这是有道理的。

示例:test1.text:

how are you
I am well
all is good

test2.txt:

how are you
I like toys
all is not well

输出:test3.txt

am well
good

我也尝试过这个CSV代码:但我不能出错。

import csv
f1 = open ("test1.csv")
oldFile1 = csv.reader(f1)
oldList1 = []
for row in oldFile1:
    oldList1.append(row)
f2 = open ("test2.csv")
oldFile2 = csv.reader(f2)
oldList2 = []
for row in oldFile2:
    oldList2.append(row)
f1.close()
f2.close()
print [row for row in oldList1 if row not in oldList2]

我得到了这个错误:我认为这与我在3.5版本上有关,而这个代码是为2.7编写的?

File "test3.py", line 18
    print [row for row in oldList1 if row not in oldList2]
                 ^
SyntaxError: Missing parentheses in call to 'print'

感谢您的帮助

第一个代码的问题是分割整个文件,这将通过空白(而不仅仅是新行)分割文件。

你可以简单地压缩你的拆分行,并将单词比较在一起:

with open('test1.txt') as f1, open('test2.txt') as f2, open('result.txt', 'w') as f3:
    for line1, line2 in zip(f1, f2):
        sp1 = line1.split()
        sp2 = line2.split()
        f3.write(' '.join([i for i in sp1 if i not in sp2]) + 'n')

此外,例如,如果您需要更高级的输出,您可以研究使用difflib。这里有一个很好的教程和一个合适的问题

第二段代码的问题只是"print"在python 2和3中的工作方式不同。如果你只添加一个括号,它应该可以工作,比如:

print([row for row in oldList1 if row not in oldList2])

相关内容

  • 没有找到相关文章

最新更新