读取文件,匹配字符串(标题)并在每个标题下面保存块

时间:2015-10-23 01:43:45

标签: python list dictionary

我知道如何在python中逐行读取文件,如果是这样的话,匹配案例并在字典中保存信息。但现在我有一个这样的txt文件

Head 1 

bla1
bla2
bla3

Head 2

blo 1
blo 2
blo 3
blo 4

Head 3

blu 1
blu 2

我需要保存属于每个头X的信息,例如像

head 1 : {bla 1,bla 2, bla 3}, head 2 : {blo 1, blo 2, blo 3, blo 4}, head 3 :{blu 1 , blu 2}

或类似的东西

我的一个尝试

for line in open('file.txt'):
block_dict = {}
block = []
ck_nm = [blk_nm for blk_nm in data if line.startswith(blk_nm)]
if ck_nm:
    block_dict[ck_nm[0]] = block = [] 

else:
    block.append(line)

但它只返回很多空列表。 我也尝试制作一个字典,通过匹配头部X并获取文件中的列,但由于它们没有被排序,它会返回给我这样的东西

head 1 : {bla 1, blu 2, blo 3}, head 2 : {bla 1, bla 2, blo 3, blo 4}, head 3 :{blu 1 , blo 2}

1 个答案:

答案 0 :(得分:0)

with open('data', 'r') as f:
    li = f.read()

li =  re.findall(r'(Head.*?\n+.*?)(?:\n+^$|\Z)',li, re.MULTILINE|re.DOTALL)

# # split strings on newline
li = list(map(lambda x: re.split('\n+',x),li))
# # create dictionaries
lid = [ {l[0]:{','.join(l[1:])}} for l in li]

pp(lid)

[{'Head 1': {'bla1,bla2,bla3'}},
 {'Head 2': {'blo 1,blo 2,blo 3,blo 4'}},
 {'Head 3': {'blu 1,blu 2'}}]