【发布时间】:2017-08-25 16:19:48
【问题描述】:
我曾尝试在网上搜索答案,但不幸的是没有成功。所以我在这里问:
我想弄清楚file1 中的所有行是否都存在于file2 中。幸运的是,我可以只比较整行而不是单个单词等。不幸的是,我正在处理 GB 文件,所以我尝试过的一些基本解决方案给了我记忆错误。
目前我有以下代码不起作用。一些指导将不胜感激。
# Checks if all lines in file1 are present in file2
def isFile1SubsetOfFile2(file1 , file2):
file1 = open(file1, "r")
for line1 in file1:
with open(file2, "r+b") as f:
mm=mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
my_str_as_bytes = str.encode(line1)
result = mm.find(line1.strip().encode())
print(result)
if result == -1:
return False
return True
示例文件2:
This is line1.
This is line2.
This is line3.
This is line4.
This is line5.
This is line6.
This is line7.
This is line8.
This is line9.
应该通过,例如文件 1 是:
This is line4.
This is line5.
应该失败,例如文件 1 是:
This is line4.
This is line10.
编辑:我刚刚添加了我的代码的工作版本以供其他人受益。没有内存错误,但速度很慢。
【问题讨论】:
-
Ick,你的代码是
O(m*n)。在O(m log m + n log n)中执行此操作很简单,有时可以在O(m + n)中执行此操作 -
你所说的关于算法复杂性等的内容超出了我的理解范围。
-
那么在你学习任何其他关于编程的知识之前,先了解一下算法复杂性和大O符号。这是重要的。
-
你能给我指点一些关于这个的外行文章吗?谢谢
-
维基百科很不错:en.wikipedia.org/wiki/Big_O_notation 和 en.wikipedia.org/wiki/Analysis_of_algorithms - 但任何像样的教科书也应该涵盖它
标签: python python-3.x filecompare