繁体   English   中英

如何在两个文本文件的 Python 中进行差异并忽略空格和空行?

[英]How to do a diff in Python of two text files and ignore white space and blank lines?

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

我现在想在 Python 中做同样的事情,但没有发现任何工作。 我已经阅读了 StackOverflow 中的其他文章,建议如何使用,但它们都不起作用。

我不认为人们实际上会自己尝试以证明建议在发布之前会起作用。


如果有人成功地对两个文件进行了差异,忽略了 Python 中的空白/空白行,请发布,这对我和其他一些人最有帮助。

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

is_match = cmp(file1, file2)

下面是一个示例,说明如何使用正则表达式和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表示。

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

如果您可以假设两个文件的行匹配,并且两个文件之间的任何差异仅在每行级别,那么您可以遍历这两个文件并逐行比较它们,将 memory 要求删除为几乎为零。 您仍然可以使用此处显示的技术来比较每一行。

作为测试,我使用了一个在线 Lorum Ipsum 生成器来生成这个文件:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM