如果输入文件很大,则不能使用
readlines
,但什么都没有
阻止你阅读
一
循环中的一行。
作为
文件
对象是可初始化的,您可以将循环写为:
for line in fh:
处理循环内输入行的内容。
文件大小并不重要,因为您不会试图一次读取所有行。
检查您的字符串是否存在(
bhuvi
)在线使用
re.search
不是
re.findall
.
实际上你不需要任何匹配的列表,这就足够找到
一
单一的
匹配(它工作得更快)。
下面是一个示例程序(
蟒蛇3.7
)写下包含您的
字符串,以及行号:
import re
cnt = 0
with open('input.txt') as fh:
for line in fh:
line = line.rstrip()
cnt += 1
if re.search('bhuvi', line):
print(f'{cnt}: {line}')
注意我用过
rstrip()
如果有的话,去掉尾随的换行符。
评论后编辑:
你写的要检查的文件是
巨大的
. 所以有一个风险
如果你想读的话
整体
进入计算机内存,程序
内存不足。
在这种情况下,您必须一块一块地读取文件,并且
分别在每个块中执行搜索。
还有一个风险是,包含您要查找的文本的行
部分
一块读,另一块读,
所以你必须采取一些措施来避免在你的程序中出现这种情况。
另一方面,如果除了使用
MMAP
,
尝试一下
re.finditer(r'[^\n]*bhuvi[^\n]*', map)
,即创建
一个迭代器寻找:
-
除
\n
.
-
你的绳子。
-
除
\n
.
这样,迭代器返回的match对象将与
整条线
不是只有你的绳子。