[英]Python specific find in file
我正在嘗試通過邊做邊學來學習 python,但我的代碼有問題。 嘗試執行代碼,在其中輸入 IP 並且代碼將檢查 IP 是否在 ips.txt 文件中,但是當我添加例如“192.168.0.10”並且文件中已經是“192.168.0.10”時,它將顯示,“192.168.0.10”在 txt 文件中,因為“10”是“100”數字的一部分。
同樣的例子是“狗”和“狗”,“狗”基本上在“狗”里面,所以它會告訴狗在文件中......
你能幫我嗎? 謝謝
IPs = IPs.read()
IP = input("Check IP: ")
if IP in IPs:
print("IP is in the list.")
else:
print("IP is not in the list.") ```
IPs.read()
產生一個字符串。 這意味着當您IP in IPs
,它正在檢查字符串IP
是否是IPs
的 substring (它執行substring search
) 在您的情況下,請注意 IPs 中的"" in IPs
中的"1" in IPs
".1" in IPs
將評估為True
。
您想要的是IPs
是一個字符串列表,可以通過以下方式實現:
IPs = IPs.read().splitlines()
這會讀取輸入並用換行符分割字符串,所以如果文本文件包含:
192.168.0.10
192.168.0.9
192.168.0.7
IP 將是:
["192.168.0.10", "192.168.0.9", "192.168.0.7"]
因此,現在,當您IP in IPs
,它將linear search
IPs
中的值IP
。 線性搜索需要O(n)
時間,其中n
是列表的長度。 如果IPs
的順序無關緊要並且您要進行大量查找,我建議通過IPs = set(IPs.read().splitlines())
將列表轉換為集合。 這樣,當您IP in IPs
時,查找時間是恆定的,無論列表的大小(又名程序 go 縮放)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.