【问题标题】:How to read specific lines in a file and insert them to a dictionary in python? [closed]如何读取文件中的特定行并将它们插入到 python 中的字典中? [关闭]
【发布时间】:2014-04-16 02:48:11
【问题描述】:

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

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

【问题讨论】:

    标签: python file sorting dictionary


    【解决方案1】:

    这个想法是遍历文件行,尝试通过strptime() 将行解析为datetime - 如果成功,请记住日期的年份,否则 - 通过regular expression 解析行并写入data字典:

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

    确保您了解这里发生了什么。如果没有 - 请随时在 cmets 中提问。

    【讨论】:

    • 谢谢..我理解了代码!小查询,我怎样才能在字典中插入相同的值,但是如果没有提到日期格式,只有一些字符串“Class Data - 1”或Class Data -2!请帮帮我!
    • @user3347570 不能说没有样本输入。可能,最好在单独的线程/问题中提问,谢谢。
    【解决方案2】:

    如果你真的使用 TSV 文件格式(制表符分隔值),这是我能想象到的最简单的解决方案:

    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()
    

    “结果”字典就是您所要求的 :)

    【讨论】:

      【解决方案3】:

      我不会为你写这篇文章,但它应该有助于你走上正轨。

      如果你的文件格式是一致的

      YYYY-MM-DD
      Name ## Class ## ##
      

      那么下面就比较简单了。

      您可以执行以下操作,检查该行是否包含“Class”。
      如果没有(这意味着该行包含 YYYY-MM-DD),那么您现在有一个字典键前缀,并且可以拆分为“-”以提取年份。 如果它包含类,那么您现在可以完成您的字典前缀 (YYYY_Name) 并以 d["YYYY_Name"] 作为键分配列表中的剩余值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-23
        相关资源
        最近更新 更多