我正在尝试制作一个python脚本,将两个不同文件的相似性输出到第三个文件中。我知道有一种简单的方法可以做到这一点,那就是使用嵌套的for循环检查两个文件上的每一行,但我选择不这样做,因为我试图让它尽可能快地运行。这是因为我正在处理半大文件(每个100-200MB),检查两个文件上的每一行都比我偶然发现的要长得多:
我发现的另一种快速方法是导入mmap并使用.find()函数检查第一个文件中的每一行
import mmap
import time
RESULTS = open('sims.txt', 'w')
f1 = open('file1.txt', 'r')
f = open('file2.txt')
f2 = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
for line1 in f1:
if len(line1) > 3:
if f2.find(line1) != -1:
RESULTS.write(line1)
RESULTS.close()
f1.close()
这个方法在读取第二个文件时速度非常快,并且没有语法错误,但它只是不能正常工作。以下是file1.txt和file2.txt的示例
file1:
orange
hotdog
pig
file2:
apple
mango
orange
pig
hotdog
在sims.txt上,输出应该是橙色和热狗,但sims.txt始终为空。请告诉我是否有解决这个问题的方法,或者更好的方法,同时仍然保持find()函数的速度,或者这是不可能的。谢谢!
(附注:我2-3天前才开始学习python,所以我很可能犯了一个简单的错误)
发布于 2018-06-06 05:52:54
您可以使用if line1 in f:
进行测试
import time
RESULTS = open('sims.txt', 'w')
f1 = open('file1.txt', 'r')
f = open('file2.txt')
for line1 in f1:
if len(line1) > 3:
if line1 in f:
RESULTS.write(line1)
RESULTS.close()
f1.close()
您必须小心,因为line1正在读取换行符
https://stackoverflow.com/questions/50709108
复制相似问题