使用python3.5将每一行的差异输出到新文件中的新行,按行比较两个文件

2024-04-25 08:19:45 发布

您现在位置:Python中文网/ 问答频道 /正文

这种类型的问题已经被问过好几次了,但我似乎找不到完全相同的场景并使用python3

我有两个文件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.txt文件:

how are you
I am well
all is good

test2.txt文件:

how are you
I like toys
all is not well

输出: 测试3.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'

谢谢你的帮助


Tags: 文件csvintxtforifnot差异
3条回答

此外,如果您需要更高级的输出,您可以考虑使用difflib。这是nice tutorialfitting question

第一个代码的问题是您正在拆分整个文件,这将按空格(而不仅仅是新行)拆分文件。你知道吗

您只需将拆分的行压缩,然后将单词比较在一起:

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')

第二个代码的问题很简单,‘print’在python2和python3中的工作方式不同。如果只添加一个圆括号,它应该可以工作,如下所示:

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

相关问题 更多 >