[英]What is the best way to find string in txt file by using python?
必須有多種方法可以使用 python 在 txt 文件中查找字符串,但最好的方法是什么? (為了速度,為了資源......)
我的第一個想法如下。
file = open('/home/socfw/src/edl/outbound_monthly.txt')
inputIP = '127.0.0.1'
while (1):
line = file.readline()
if inputIP in line:
print("ok")
break
但是,正確使用 web 服務太慢了(它實際上是我的 web 服務的后端邏輯)txt 文件如下所示
test.txt(這里有IPV4地址,將近60k)
x.x.x.x
x.x.x.x
.
.
.
.
我的源代碼導致 100% CPU 持續幾分鍾,所以我想找到另一種方法。 有什么好的解決辦法嗎? 提前致謝。
謝謝你回答我。 我改變了我的來源如下。
with open('/home/socfw/src/edl/outbound_monthly.txt') as outMonIPs:
ip = set(line.strip() for line in outMonIPs)
inputIP = '111.90.150.249'
#while True:
if inputIP in ip:
print("ok")
# break
else:
print("no")
# break
我還有一個問題,我應該為這項工作使用loop
嗎? 當我將整個文件保存在內存中時,我認為不再需要循環。
如果您必須使用文本文件,您可以嘗試將整個文件讀入內存而不是逐行搜索以加快速度。 (如果您將所有文件讀入內存,則不再需要循環)
您可以嘗試使用 grep 或 find,而不是編寫 Python 腳本來進行搜索。
您應該考慮將數據放入數據庫並查詢以查找匹配項。 這種方法應該更有效地利用資源並且應該更快,因為數據庫可以使用索引,並且它們不必將整個數據集讀入內存來查找匹配項。 如果您的應用程序足夠簡單,您或許可以使用 sqlite。
您可以嘗試以這種方式使用for
循環:
for line in file:
if inputIP in line:
print(ok)
break
如果您的任務是“我有一個靜態文本文件,並且有動態查詢詢問該文本文件是否包含特定的 IP 地址”,那么只需將文件讀入內存一次,然后在查詢進來時對其進行處理。
with open('/home/socfw/src/edl/outbound_monthly.txt') as ipaddresses:
ip = set(line.strip() for line in ipaddresses)
while True: # notice how a boolean is the idiomatic way to express an endless loop
queryip = somehow receive a query from a client()
if queryip in ip:
tell client yes()
else:
tell client no()
如果您的客戶端是 Web 瀏覽器或 Web API 的使用者, while
循環中的偽代碼可能會被 Flask 路由或其他東西替換; 但是這種通用模式幾乎適用於任何類型的服務器。
沒有任何明顯的方法可以使將文本讀取到內存中的效率更高 - 如果您設法實現 100% CPU,這對您有好處,因為通常此類任務受 I/O 限制,而不是 CPU 限制。
如果文本文件不是靜態的,也許您可以定期將其重新讀取到內存中,或者在更新時將其導入到數據庫中,然后讓客戶端進行查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.