这种类型的问题已经被问了好几次,但我似乎找不到完全相同的场景,并且正在使用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])