如何读取文件中的特定行并将它们插入python中的字典?

时间:2014-04-16 02:48:12

标签: python file sorting dictionary

我有一个格式为的文本文件:

    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']}   

3 个答案:

答案 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"]作为键。