【问题标题】:Save text elements separated by tab and commas in lists将由制表符和逗号分隔的文本元素保存在列表中
【发布时间】:2018-04-04 14:57:05
【问题描述】:

我在python中有以下文本格式:

126    attr1,attr7,attr4 and attr8
1    attr6,attr2,attr9,attr78,attr23,attr56,attr75,attr77
5    attr5,attr3,attr2
7    attr0
67    attr12,attr13,attr14

所以我想将 ids(126,1,5 等) 保存在一个列表中,并将每一行属性保存在一个列表或字典中。我使用以下代码保存了 ID,但无法保存属性。这是我的代码:

file = open("myfile.txt","r")
    lines = file.readlines()
    nodes = []
    skills = [] #or dict()
    for x in lines:
        nodes.append(x.split('\t')[0])
        skills.append(x.split(',')[0]) #i want a list of lists or a dict with attrs

【问题讨论】:

  • attr4 and attr8 是怎么回事?这是一个错字还是要处理的真实案例?应该如何处理?

标签: python python-3.x list dictionary text


【解决方案1】:

我认为这样可以解决问题:

for x in lines:
        x = x.split('\t')
        nodes.append(x[0])
        skills.append(x[1].split(','))

【讨论】:

    【解决方案2】:

    我宁愿建议使用以ids 作为其键并以attr 作为值列表的单个字典:

    d = {}
    file = open("myfile.txt","r")
    lines = file.readlines()   
    for line in lines:
        splitted = line.split()
        d.update({splitted[0]: splitted[1].split(',')})
    print(d)
    
    # {'126': ['attr1', 'attr7', 'attr4', 'attr8'], 
    #    '1': ['attr6', 'attr2', 'attr9', 'attr78', 'attr23', 'attr56', 'attr75', 'attr77'],
    #    '5': ['attr5', 'attr3', 'attr2'], 
    #    '7': ['attr0'], 
    #   '67': ['attr12', 'attr13', 'attr14']}                   
    

    【讨论】:

      【解决方案3】:

      如果您希望所有属性都作为连接字符串,那么:

      attr_dict={}
      with open('file.txt','r') as f:
          for line in f:
              attr_dict[line.split()[0]]=line.split()[1:]
      
      print(attr_dict)
      

      输出:

      {'126': ['attr1,attr7,attr4', 'and', 'attr8'], '7': ['attr0'], '5': ['attr5,attr3,attr2'], '1': ['attr6,attr2,attr9,attr78,attr23,attr56,attr75,attr77'], '67': ['attr12,attr13,attr14']}
      

      如果你想要单独的元素,那么:

      attr_dict={}
      with open('file.txt','r') as f:
          for line in f:
              data=line.split()
              for sub_data in data:
                  attr_dict[line.split()[0]]=sub_data.split(',')
      
      print(attr_dict)
      

      输出:

      {'126': ['attr8'], '7': ['attr0'], '5': ['attr5', 'attr3', 'attr2'], '1': ['attr6', 'attr2', 'attr9', 'attr78', 'attr23', 'attr56', 'attr75', 'attr77'], '67': ['attr12', 'attr13', 'attr14']}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-12
        相关资源
        最近更新 更多