使用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
来完成这项工作吗?
我认为,当我将整个文件保存在内存中时,不再需要循环
您可以通过以下方式尝试使用
for
循环:如果您必须使用文本文件,您可以尝试将整个文件读入内存,而不是逐行搜索以加快速度。(如果将所有文件读入内存,则不再需要循环)
您可以尝试使用grep或find,而不是编写python脚本来进行搜索
<>你应该考虑把你的数据放到一个数据库中并查询它来找到匹配。这种方法的资源效率应该更高,速度也应该更快,因为数据库可以使用索引,而不必将整个数据集读入内存来查找匹配项。 如果您的应用程序足够简单,您可能可以使用sqlite如果您的任务是“我有一个静态文本文件,并且存在询问该文本文件是否包含特定IP地址的动态查询”,则只需将该文件读入内存一次,然后在查询进入时处理查询
如果您的客户机是web浏览器或web API的使用者,那么
while
循环中的伪代码可能会被替换为Flask路由或其他内容;但这种通用模式几乎适用于任何类型的服务器没有任何明显的方法可以提高将文本读入内存的效率——如果您能够实现100%的CPU,那么这对您很有好处,因为这种任务通常是I/O限制的,而不是CPU限制的
如果文本文件不是静态的,也许您可以定期将其重新读取到内存中,或者只要在更新时将其导入数据库,让客户机查询即可
相关问题 更多 >
编程相关推荐