如何在Python中区分两个文本文件并忽略空白和空行?

2024-10-02 12:32:13 发布

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

我可以使用Gnudiff命令和开关成功地比较两个文件:--ignore-all-space

我现在想用Python做同样的事情,但没有发现任何可行的方法。我在StackOverflow上读过其他文章,建议如何操作,但没有一篇有效

我不认为人们在发帖前会亲自尝试证明一个建议是有效的


如果有人在Python中忽略了空格/空行,成功地对两个文件进行了区分,请发布,这对我和其他许多人都是非常有帮助的

在python中,我正在导入from filecmp import cmp,并使用以下行:

is_match = cmp(file1, file2)


Tags: 文件方法命令证明文章spaceallstackoverflow
1条回答
网友
1楼 · 发布于 2024-10-02 12:32:13

下面是一个示例,说明如何使用正则表达式和strip来整合两个仅包含空格差异的文本,以便进行比较:

text1 = """now is        the
time
for
all             good men to come to
the aid         of their country
"""

text2 = """now is the time for all good men to come to the aid of their country"""

import re

if (text1 == text2):
    print("YES!!!!")

text1 = re.sub(r'\s+', ' ', text1).strip()
text2 = re.sub(r'\s+', ' ', text2).strip()

print(text1)
print(text2)

if (text1 == text2):
    print("YES!!!!")

结果:

now is the time for all good men to come to the aid of their country
now is the time for all good men to come to the aid of their country
YES!!!!

使用这种技术所需要做的就是将每个文件的内容读入一个字符串,如text1text2所示

更新:此方法确实使用了相当大的内存,因为每个文件都必须完全读入内存。但是,如果在进行比较时忽略了行尾,那么我不确定如果没有大量的技巧,包括在内存中对每个文本的某些部分进行奇妙的缓冲,您将如何完成这项任务。但“可观”在这里并不一定意味着“值得担心”。对于大小甚至为多兆字节的文件使用此技术应该不是问题。我预计大多数情况下都会涉及更小的文本文件。当然,在某些情况下,这种技术需要被更复杂的东西所取代,因为内存效率是一个真正的问题

如果您可以假设两个文件的行匹配,并且两个文件之间的任何差异仅在每行级别上,那么您可以迭代两个文件并逐行比较,从而将内存需求降至几乎为零。您仍然可以使用此处显示的技术来比较每一行

作为测试,我使用在线Lorum Ipsum生成器生成以下文件:

> ls -l /tmp/t1.txt
-rw-r r   1 steve  wheel  8430006 Jan 18 12:29 /tmp/t1.txt

我用这个8+MB文件的两个副本测试了所描述的技术。当我运行它时,我发现读取和比较这两个文件所花的时间是显而易见的,但不到一秒钟。我不知道以另一种方式执行此任务是否可以避免这几百毫秒的执行时间

相关问题 更多 >

    热门问题