我有一个像这样的文件
===
aa
bb
===
aa
cc
dd
==
11
我需要提取“===”之间的行并将它们放在不同的变量中(可能是一个列表)。
你能帮帮我吗? 谢谢答案 0 :(得分:2)
with open('input.txt') as input_file:
result = input_file.read().split('===\n')
print result
答案 1 :(得分:2)
您可以使用itertools.groupby对===
之间的行进行分组,并将它们添加到字典中。
from itertools import groupby,count
with open("in.txt") as f:
cn = count()
d = {}
for k, v in groupby(f, lambda x: not x.startswith("=")):
if k:
d[next(cn)] = "".join(v)
{0: 'aa\nbb\n', 1: 'aa\ncc\ndd\n', 2: '11'}
假设每个部分至少有一个=
。
当我们找到以=
开头的行时,使用defaultdict更改密钥:
from collections import defaultdict
from itertools import count
with open("in.txt") as f:
cn = count()
d = defaultdict(str)
for line in f:
if line.startswith("="):
key = next(cn)
else:
d[key] += line
print(d)
defaultdict(<type 'str'>, {0: 'aa\nbb\n', 1: 'aa\ncc\ndd\n', 2: '11\n'})
无论哪种方式都会避免一次将所有文件读入内存。如果您要删除换行符,请使用line.rstrip
如果您希望每行作为列表中的单个元素:
from itertools import groupby, count
with open("in.txt") as f:
cn = count()
d = {}
for k, v in groupby(f, lambda x: not x.startswith("=")):
if k:
d[next(cn)] = list(map(str.rstrip, v))
print(d)
{0: ['aa', 'bb'], 1: ['aa', 'cc', 'dd'], 2: ['11']}
最后,如果你想要一个清单列表:
with open("in.txt") as f:
print [list(map(str.rstrip, v)) for k,v in groupby(f, lambda x: not x.startswith("=")) if k]
[['aa', 'bb'], ['aa', 'cc', 'dd'], ['11']]