如何比较某个文件中的所有行与另一行?

时间:2015-05-14 17:16:27

标签: python

我是Python新手,需要一些帮助。

我有一个x行数的文件。我想比较该文件的每一行与另一行,如果它们不同,则将该行写入该文件。

我找了一个答案,但没找到任何可以使用的东西。我自己尝试了一些东西,但它不起作用。

我的代码:

filename = ...
my_file = open(filename, 'r+')
for line in my_file:
    new_line = ("text")
    print line
    print new_line
    if new_line == line:
        print('same')
    else:
        print('diffrent')
        my_file.write('%s' % (new_line))

我只希望我的应用程序将该行写入该文件(如果该文件尚不存在)。

contents of filename
====================
text
text1
text2

在上面的情况下,新行是“text”,应用程序不应该执行任何操作,因为该行已存在于文件中。但是,如果新行是“text3”,则应将其写入文件,如下所示:

contents of filename
====================
text
text1
text2
text3

3 个答案:

答案 0 :(得分:1)

首先,让我们读取文件的内容,以便我们检查新行是否已经存在。

existing_lines = [line.rstrip('\n') for line in open(filename, 'r')]

我们假设您有一个名为new_lines的单独列表,其中包含您要对文件进行检查的所有行。然后,您可以检查以下哪些是新的:

new = [line for line in new_lines if line not in existing_lines]

这些是您希望附加到现有文件的行:

with open(filename, 'a') as f:
    [f.write(line + '\n') for line in new]

答案 1 :(得分:0)

我建议您创建一个新文件并将差异写入新文件,而不是编辑file2.txt

with open("file1.txt", "r") as first_file, open("file2.txt", "r") as second_file:
    file1 = first_file.readlines()
    file2 = second_file.readlines()
    length = min(len(file1), len(file2))
    for i in xrange(length):
        if file1[i].strip() != file2[i].strip():
            #Do something here

答案 2 :(得分:0)

with open('1.txt') as f1, open('2.txt') as f2, open('diff.txt','w') as dst:
    while True:
        l1 = f1.readline()
        l2 = f2.readline()
        if not l1 and not l2:
            break
        if l1 != l2:
            dst.write(l1)