【发布时间】:2020-01-13 08:11:40
【问题描述】:
使用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
但是,正确使用网络服务太慢了(实际上是我的网络服务的后端逻辑) 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 来完成这项工作吗?
当我将整个文件保存在内存中时,我认为不再需要循环。
【问题讨论】:
-
您的重构效率较低,因为现在您每次都将整个文件读入内存,即使在第一行找到该字符串也是如此。如果读取整个输入文件的成本可以分摊到多次使用中,那么用内存换取速度是有意义的,但如果在一次查询后将其全部扔掉,那不会有任何改善。
标签: python while-loop ipv4