日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/3/20 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用python多个关键字查找_python 如何实现并行查找关键字所在的行? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

因為沒有實際的文件,沒有辦法給你一個百分之百的保證,不過對於你的 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 如何实现并行查找关键字所在的行?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。