因為沒有實際的文件,沒有辦法給你一個百分之百的保證,不過對於你的 code,我有一些些效率改進上的建議:

(也許你會發現改進後的代碼根本不需要使用並行的解決的方案)

首先一個很大的問題是 readlines(),這個方法會一口氣讀取 file objects 中的所有行,這對於效率和資源的使用顯然是極差的,幾十萬行幾百萬行的東西要一口氣讀完了,這可是非常恐怖的.

(文章中的這段話幾乎可當作是警語了)

There are hundreds of questions on places like StackOverflow about the readlines method, and in every case, the answer is the same.

"My code is takes forever before it even gets started, but it's pretty fast once it gets going."

That's because you're calling readlines.

"My code seems to be worse than linear on the size of the input, even though it's just a simple loop."

That's because you're calling readlines.

"My code can't handle giant files because it runs out of memory."

That's because you're calling readlines.

結論是: 建議所有使用 readlines 的地方全部改掉.

範例:

with open('XXX', 'r') as f:

for line in f.readlines():

# do something...

一律改成:

with open('XXX', 'r') as f:

for line in f:

# do something...

直覺上效率會好很多.

其次,你使用了 list 來查找關鍵字,這也是相當沒效率的:

for i in a:

if i in new_line:

為了確認 new_line 中是否有關鍵字 i,這邊走訪了一整個關鍵字 list: a,對於一般的情況可能還好,但是數十萬的關鍵字比對,對每一行都走訪一次 a 會造成大量的時間浪費,假設 a 裡面有 x 個關鍵字,f3 中有 y 行,每行有 z 個字,這邊要花的時間就是 x*y*z(根據你文件的行數,這個數量級極為驚人).

如果簡單地利用一些使用 hash 來查找的容器肯定會好一些,比如說 dictionary 或是 set.

最後是關於你的查找部分:

for li in f3.readlines():

new_line = li.strip().split()[1][:-2]

for i in a:

if i in new_line:

f5.writelines(li)

這邊我不是很懂,new_line 看起來是一個子字串,然後現在要用這個字串去比對關鍵字?

不過先撇開這個不談,關於含有關鍵字的 new_line 在印出後,似乎不該繼續循環 a,除非你的意思是 new_line 中有幾個關鍵字我就要印 line 幾次. 否則加上一個 break 也是可以加快速度.

建議你的code改為:

with open('3.txt') as f3, open('4.txt') as f4, open('result.txt', 'w') as f5:

keywords = set(line.strip() for line in f4)

for line in f3:

new_line = line.strip().split()[1][:-2]

for word in new_line:

if word in keywords:

print(line, file=f5)

break

如果我有弄錯你的意思,歡迎跟我說,我們再來討論一下,直覺上應該不必使用到並行就可以解決你的問題

用python多个关键字查找_python 如何实现并行查找关键字所在的行?相关推荐

  1. python中可变参数和关键字参数_python的可变参数和关键字参数(*args **kw)

    本文是来自廖大的python教程其中我一直忘记的部分.算是一个笔记把.因为日常这俩参数名字一直搞混 可变参数 在Python函数中,还可以定义可变参数.顾名思义,可变参数就是传入的参数个数是可变的,可 ...

  2. python 可变参数 关键字参数_Python之 可变参数和关键字参数

    原标题:Python之 可变参数和关键字参数 刚开始接触 python 的时候,对 python 中的 *wargs (可变参数) 和 **kwargs (关键字参数)的理解不是很透彻,看了一下 &l ...

  3. python递归查找_Python程序使用递归查找数字的幂

    python递归查找 Given the base x and the power y and we have to find the x to the power y using recursion ...

  4. python通过路径找文件_Python寻找路径和查找文件路径的示例

    怎么python系统的查找路径要是爱你爱的少些,话就可以说的多些了.简?奥斯汀 ⒈单击开始,在搜索框输入cmd,然后回车,就会出现命令行界面框后,在里面输入命令python后回车,安装成功的话就可以看 ...

  5. python函数关键字参数传递_Python给函数传递不定关键字的参数

    转载请注明来自公众号『数据挖掘机养成记』 前言 在上一篇文章『[Python]给函数传递不定个数的参数』中,我们主要讲解了*在函数定义和函数调用阶段的不同作用,并留了一个小问题: 我们用*定义了add ...

  6. python变量作用域搜索顺序_Python函数作用域的查找顺序

    函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...

  7. python快速查找_python应用_快速查找 | 学步园

    快速查找 import random def partition(list_object,start,end): random_choice = start#random.choice(range(s ...

  8. python下载网页链接文件_Python在网页上查找文件下载链接

    我需要一个正则表达式,它将返回包含在以指定文本块开头的双引号之间的文本,并以特定文件扩展名(例如.txt)结束.我正在使用urllib2来获取页面的html(html非常简单). 基本上如果我有类似的 ...

  9. python爬取头条图集_python爬取今日头条关键字图集

    1 #!/usr/bin/env python 2 #encoding: utf-8 3 4 """ 5 @version: python376 @author: Geo ...

最新文章

  1. vmware克隆server2008R2造成SID冲突
  2. 秒懂 CountDownLatch 与 CyclicBarrier 使用场景
  3. MATLAB问题解决方案- Matlab出现报错:​‘***‘不是内部或外部命令,也不是可运行的程序或批处理文件
  4. android 从assets和res中读取文件(转)
  5. 深度剖析数据库国产化迁移之路
  6. python数据库-mongoDB的高级查询操作(55)
  7. 程序猿的执业修养(七)——不要卖弄,多思慎言
  8. 计算字符串长度(英文占1个字符,中文汉字占2个字符)
  9. MFC字符串操作(三)MFC CString其他用法小结
  10. sql查询表名、列名、列属性
  11. 分享2个堪称黑科技的Ai一键抠图网站 让你秒变PS抠图大神
  12. ​LeetCode刷题实战507:完美数
  13. 多图详解CLH锁的原理与实现
  14. 再聊聊Python中文社区的翻译
  15. 1060 5G/1065 版显卡安装TensorFlow/CUDA
  16. java操作hfds----刘雯丽
  17. 7-11 哥德巴赫猜想
  18. vue 实现电子签名功能 支持生成图片
  19. 谁说国内无RISC-V开源核——您还不知蜂鸟E200?
  20. BCB(C++ Builder)创建动态库(DLL,接口导出和调用),动态加载DLL

热门文章

  1. vagrant --- vagrant部署环境
  2. channelartlist标签不能调用外部链接栏目的解决办法
  3. 使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行
  4. 读书笔记—写给大家看的PPT设计书
  5. Python可视化:Seaborn(二)
  6. 国网浙江电力组建网络安全分析室
  7. 图像识别DM8127开发攻略——开发环境搭建
  8. XcodeGhost风波过后,苹果如何防范风险?
  9. Linux内核链表深度分析【转】
  10. 基于订阅的服务通讯架构体系