我有一个很大的文件,像这样:
[PATTERN1] line1 line2 line3 ... ... [END PATTERN] [PATTERN2] line1 line2 ... ... [END PATTERN]
我需要在另一个文件中提取变量starter模式[PATTERN1]和另一个define模式[END pattern]之间的行,仅用于某些特定的starter模式。
例如:
[PATTERN2] line1 line2 ... ... [END PATTERN]
我已经做了同样的事情,用一个较小的文件,使用以下代码:
FILE=open('myfile').readlines()
newfile=[]
for n in name_list:
A = FILE[[s for s,name in enumerate(FILE) if n in name][0]:]
B = A[:[e+1 for e,end in enumerate(A) if 'END PATTERN' in end][0]]
newfile.append(B)
其中“name_list”是一个包含我需要的特定启动模式的列表。
有效!!但我想有更好的方法来处理大文件,而不使用.readlines()命令。
有人能帮我吗?
非常感谢!
我想这和你的代码一样:
这样你只需浏览一次所有的行,然后在浏览时填写你的列表。
考虑:
打印“需要这些东西”
更灵活(例如允许重新模式匹配)的方法是使用itertools drop-and-takewhile:
使用类似于
这将迭代文件,而不将其全部读入内存。它还直接写入新文件,而不是附加到内存中的列表。如果你的来源足够大,也可能成为一个问题。
显然,您可能需要对此代码进行许多修改;也许不需要regex模式来匹配开始/结束行,在这种情况下,可以用
if 'xyz' in line
之类的内容替换它。相关问题 更多 >
编程相关推荐