在python中循环文件时更改索引
假设我必须阅读一个文件(相当大,大约20000行)。我必须在各行中循环查找关键字,例如在python中循环文件时更改索引,python,file,loops,Python,File,Loops,假设我必须阅读一个文件(相当大,大约20000行)。我必须在各行中循环查找关键字,例如STACKOVERFLOW。一旦找到关键字,我知道我将不得不处理接下来的10行 目前我做的是: with open(filepath) as f: for line_idx, line in enumerate(f): if re.match(my_keyword, line): # do something here from line_idx to line_
STACKOVERFLOW
。一旦找到关键字,我知道我将不得不处理接下来的10行
目前我做的是:
with open(filepath) as f:
for line_idx, line in enumerate(f):
if re.match(my_keyword, line):
# do something here from line_idx to line_idx + 9
# can i jump directly to line_idx + 10 ???
找到关键字后,是否有方法跳过接下来10行的过程(循环+搜索),并继续循环搜索,例如,行索引+10
谢谢大家!
更新
我想补充一点,我想要的是一种不必临时将文件保存到列表中的方法。使用此方法,我已经有了自己的解决方案。您可以使用普通for循环,而不是for each循环:
with open(filepath) as f:
lines = f.readlines()
for i in range(len(lines)):
if re.match(my_keyword, lines[i]):
# do something
i += 10
不过,它将比当前使用更多的内存,因为您正在将整个文件一次读入内存。要记住的东西
或者,如果将整个文件读入内存是一个问题,您可以将以下内容组合在一起:
with open(filepath) as f:
skip = 0
for line in f:
if skip <= 0:
if re.match(my_keyword, line):
skip = 10
else:
skip -= 1
print(line) # The next ten lines after a match can be processed here
打开(文件路径)作为f:
跳过=0
对于f中的行:
如果跳过//可能的解决方案是
f = open(filepath,"r")
lines = f.readlines()
count = -1
req_lines = []
for line in lines:
count += 1
if re.match(my_keyword, line):
for i in range(10):
count += 1
req_lines.append(lines[count])
//现在,您需要的行位于名为“req_lines”的变量中,您可以对它们执行任何操作。如果您有其他选择,您仍然需要将整个文件读入行
列表,对吗?那么区别是什么呢?@scmg在第一种方法中,将整个文件读入变量行
。在第二种方法中,您逐行迭代文件,因此在任何给定时间内存中只有一行。请参见,如果重新匹配(my_关键字,line[i])
,那么命令中的行[i]
是什么?如果在一行中找到关键字,我应该如何处理接下来的10行?e、 g.打印它们out@scmg哦,你说得对。那是复制粘贴留下的。我编辑了我的答案。至于打印其他行,可以在else
块中完成。您能提供一个示例吗?我不确定它是否在else
块中工作。。。