我正在处理一个巨大的文件.我想在行中搜索一个单词,当找到时我应该在模式匹配之前打印10行和10行.我怎么能在Python中做到这一点?
import collections
import itertools
import sys
with open('huge-file') as f:
before = collections.deque(maxlen=10)
for line in f:
if 'word' in line:
sys.stdout.writelines(before)
sys.stdout.write(line)
sys.stdout.writelines(itertools.islice(f, 10))
break
before.append(line)
Run Code Online (Sandbox Code Playgroud)
用于collections.deque在比赛前保存最多10行,并在比赛itertools.islice后获得接下来的10行.
更新要使用ip/mac地址排除行:
import collections
import itertools
import re # <---
import sys
addr_pattern = re.compile(
r'\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b|'
r'\b[\da-f]{2}:[\da-f]{2}:[\da-f]{2}:[\da-f]{2}:[\da-f]{2}:[\da-f]{2}\b',
flags=re.IGNORECASE
) # <--
with open('huge-file') as f:
before = collections.deque(maxlen=10)
for line in f:
if addr_pattern.search(line): # <---
continue # <---
if 'word' in line:
sys.stdout.writelines(before)
sys.stdout.write(line)
sys.stdout.writelines(itertools.islice(f, 10))
break
before.append(line)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3493 次 |
| 最近记录: |