使用python在txt文件中查找字符串的最佳方法是什么?

2024-09-29 23:22:20 发布

您现在位置: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来完成这项工作吗? 我认为,当我将整个文件保存在内存中时,不再需要循环


Tags: 文件方法insrctxthomeoutboundline
3条回答

您可以通过以下方式尝试使用for循环:

for line in file:
    if inputIP in line:
        print(ok)
        break

如果您必须使用文本文件,您可以尝试将整个文件读入内存,而不是逐行搜索以加快速度。(如果将所有文件读入内存,则不再需要循环)

您可以尝试使用grep或find,而不是编写python脚本来进行搜索

<>你应该考虑把你的数据放到一个数据库中并查询它来找到匹配。这种方法的资源效率应该更高,速度也应该更快,因为数据库可以使用索引,而不必将整个数据集读入内存来查找匹配项。 如果您的应用程序足够简单,您可能可以使用sqlite

如果您的任务是“我有一个静态文本文件,并且存在询问该文本文件是否包含特定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限制的

如果文本文件不是静态的,也许您可以定期将其重新读取到内存中,或者只要在更新时将其导入数据库,让客户机查询即可

相关问题 更多 >

    热门问题