最后一个匹配的字符串在python中被跳过



团队,

日志文件中的最后一个字符串ml31被跳过,无法进行评估,最终生成的字典缺少其条目。有什么提示吗?

ml1
/core
/home
ml2
/var
/home
/lib
cpuml3
/home
/root
/raid
ml31
/home
/root
/raid
import os
homedir=os.environ.get('HOME')
print(homedir)
key_str = "ml"
val_list = []
key = ''
my_dict = {}
with open(homedir + '/backup/file2dict.result') as file2dict:
for line in file2dict:
words = line.split()
for aWord in words:
if key_str in aWord: 
if key: 
my_dict[key] = val_list
print(my_dict)
val_list = []
key = aWord
else: 
key = aWord
else:
val_list.append(aWord)
print(my_dict)

输出

{'ml1': ['/core', '/home'], 'ml2': ['/var', '/home', '/lib'], 'cpuml3': ['/home', '/root', '/raid']}

预期

{'ml1': ['/core', '/home'], 'ml2': ['/var', '/home', '/lib'], 'cpuml3': ['/home', '/root', '/raid'], 'ml31': ['/home', '/root', '/raid'] }

当你到达一个新密钥时,你会将列表分配给dictmy_dict[key] = val_list中的密钥,所以它不会出现在最后一个密钥中,你也需要在末尾添加它

with open(homedir + '/backup/file2dict.result') as file2dict:
for line in file2dict:
words = line.split()
for aWord in words:
if key_str in aWord: 
if key: 
my_dict[key] = val_list
val_list = []
key = aWord
else: 
key = aWord
else:
val_list.append(aWord)
my_dict[key] = val_list

您可以使用collections.defaultdict进行改进

key = ''
key_str = "ml"
my_dict = defaultdict(list)
# from pathlib import Path
content = Path(homedir + '/backup/file2dict.result').read_text().splitlines()
for word in content:
if key_str in word:
key = word
elif word:  # ensure not use empty lines
my_dict[key].append(word)

最新更新