Python - 尝试比较格式不同的两个文本文件

时间:2012-08-25 02:53:52

标签: python

文件1的格式如下:

1111111111
2222222222

文件2的格式如下:

3333333333:4444444444
1111111111:2222222222

我正在尝试找出一种方法来获取文件一中的内容并查看它是否与仅匹配文件二中冒号的内容。最终目标是在匹配时删除文件二中的FULL行。

我知道我可以使用标准命令剪切文件2,因此它们的格式完全相同。问题是我需要88888:99999格式的完成文件,将它们分开只是为了按正确的顺序放回它们似乎太复杂了。

我已经尝试过嵌套for循环,正则表达式,集合,列表,我的脑袋正在旋转。

我希望这是有道理的。提前谢谢。

Traceback (most recent call last):
 File "test.py", line 17, in <module>
   if line.split(":")[1] in keys:
IndexError: list index out of range

2 个答案:

答案 0 :(得分:3)

假设您要删除文件2中的行,如果该行的第二部分与文件1中的任何值匹配,您将执行以下操作:

# Warning: Untested code ahead
with open("file1", "r") as f1:
    # First, get the set of all the values in file 1
    # Sets use hash tables under the covers so this should
    # be fast enough for our use case (assuming sizes less than
    # the total memory available on the system)
    keys = set(f1.read().splitlines())

# Since we can't write back into the same file as we read through it
# we'll pipe the valid lines into a new file
with open("file2", "r") as f2:
    with open("filtered_file", "w") as dest:
        for line in f2:
            line = line.strip()  # Remove newline
            # ASSUMPTION: All lines in file 2 have a colon
            if line.split(":")[1] in keys:
                continue
            else:
                dest.writeline(line)

答案 1 :(得分:0)

这就是你可以在文件2中获取冒号的元素。也许不是最干净的,但你明白了。

 str2 = open(file2).read()
 righttocolon = [s.split(":")[1] for s in [ln for ln in str2.split("\n")] if len(s.split(":")) == 2]