首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Python 2.7.15的文件相似性检查器

使用Python 2.7.15的文件相似性检查器
EN

Stack Overflow用户
提问于 2018-06-06 05:20:36
回答 1查看 106关注 0票数 0

我正在尝试制作一个python脚本,将两个不同文件的相似性输出到第三个文件中。我知道有一种简单的方法可以做到这一点,那就是使用嵌套的for循环检查两个文件上的每一行,但我选择不这样做,因为我试图让它尽可能快地运行。这是因为我正在处理半大文件(每个100-200MB),检查两个文件上的每一行都比我偶然发现的要长得多:

我发现的另一种快速方法是导入mmap并使用.find()函数检查第一个文件中的每一行

代码语言:javascript
复制
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:

代码语言:javascript
复制
orange

hotdog
pig

file2:

代码语言:javascript
复制
apple
mango
orange
pig

hotdog

在sims.txt上,输出应该是橙色和热狗,但sims.txt始终为空。请告诉我是否有解决这个问题的方法,或者更好的方法,同时仍然保持find()函数的速度,或者这是不可能的。谢谢!

(附注:我2-3天前才开始学习python,所以我很可能犯了一个简单的错误)

EN

回答 1

Stack Overflow用户

发布于 2018-06-06 05:52:54

您可以使用if line1 in f:进行测试

代码语言:javascript
复制
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正在读取换行符

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50709108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档