我有一个格式为的文本文件:
2014-04-10
Arjun 22 Class 10 60
Anil 23 Class 09 85
2013-03-10
Jhon 21 Class 10 78
如果我想要显示字典,那么代码应该如何:
{'2014_Arjun' : ['22','Class 10','60'],'2014_Anil':['23','Class 09','85'],'2013_Jhon':['21','Class10','78']}
答案 0 :(得分:1)
想法是迭代文件行,尝试通过datetime将行解析为strptime() - 如果成功,请记住日期的年份,如果不成功 - 通过{{3解析行并写入data
dict:
from datetime import datetime
import re
data = {}
pattern = re.compile('(\w+)\s+(\d+)\s+(\w+\s\d+)\s+(\d+)')
with open('input.txt') as f:
for line in f:
try:
year = datetime.strptime(line.strip(), '%Y-%m-%d').year
except ValueError:
item = pattern.match(line.strip()).groups()
data[str(year) + "_" + item[0]] = item[1:]
print data
打印:
{'2013_Jhon': ('21', 'Class 10', '78'),
'2014_Arjun': ('22', 'Class 10', '60'),
'2014_Anil': ('23', 'Class 09', '85')}
确保您了解这里发生了什么。如果没有 - 请随意在评论中提问。
答案 1 :(得分:0)
这是我能想象的最简单的解决方案,如果你真的使用TSV文件格式(Tab Separated Values):
PATH = r"C:\text.txt"
reader = open(PATH, 'rb')
result = {}
for line in reader:
if line.count("\t") == 0:
year = line.split("-")[0]
else:
name, day, class_no, mark = line.split(TAB)
key = year + "_" + name
value = [day, class_no, mark]
result[key] = value
reader.close()
"结果"字典是你要求的:)
答案 2 :(得分:0)
我不打算为你写这个,但它应该有助于你走上正轨。
如果您的文件格式一直是
YYYY-MM-DD
Name ## Class ## ##
然后以下是相当简单的。
您可以执行以下操作,检查该行是否包含' Class'。
如果它没有(这意味着该行包含YYYY-MM-DD),那么您现在有一个字典键前缀,可以拆分' - '拉年。
如果它包含类,那么您现在可以完成字典前缀(YYYY_Name)并将列表中的剩余值分配为d [" YYYY_Name"]作为键。