【问题标题】:Dictionary of lists from tab delimited file制表符分隔文件中的列表字典
【发布时间】:2013-01-21 23:28:08
【问题描述】:

我正在尝试将制表符分隔的文本文件加载到 python 程序中。它具有以下格式,

AAAAAA    1234    5678     90AB    QQQQ    JKL1
BBBBBB    QWER    TYUI     ASDF    QQQQ
CCCCCC    ZXCV    1234     PPPP
 ...
ZZZZZZ    1111

简而言之,每行的列数是可变的,但总是至少两列,并且一行中的每一列都是唯一的。我想将第一列用作键,然后将其余列加载到列表中,键指向它。我已经尝试按照其他线程中的建议查看 csv 模块,但我还没有找到一种方法让它对我有用。所以,是的,如果这应该更明显,非常抱歉,这是一个新手问题。

【问题讨论】:

    标签: python list csv dictionary


    【解决方案1】:

    简单的str.split 应该可以很好地拆分列。使用它,您只需要读取每一行并将其拆分为以第一个元素为键,其余为值的列:

    with open(file) as fin:
         rows = ( line.split('\t') for line in fin )
         d = { row[0]:row[1:] for row in rows }
    

    【讨论】:

    • 如果值包含空格,最好使用line.split('\t')
    • @interjay -- 很公平。我跳过了它说“制表符分隔”的地方。我以为它们只是空间序列:)
    【解决方案2】:
    >>> import csv
    >>> with open('eggs.csv', 'rb') as csvfile:
    ...     spamreader = csv.reader(csvfile, delimiter='\t', quotechar='|')
    ...     for row in spamreader:
    ...         print ', '.join(row)
    Spam, Spam, Spam, Spam, Spam, Baked Beans
    Spam, Lovely Spam, Wonderful Spam
    

    这只是一个示例,说明如何获取分隔文件并打印行数据。 显然,这可以扩展并放入字典或列表或其他东西中..

    更多信息(以及来自哪里):http://docs.python.org/2/library/csv.html

    【讨论】:

      【解决方案3】:
      import csv
      
      d = {}
      with open('tab_delimited_file.txt', 'rb') as csv_file:
          for row in csv.reader(csv_file, delimiter='\t'):
              d[row[0]] = row[1:]
      
      print(d)
      

      输出:

      {'AAAAAA': ['1234', '5678', '90AB', 'QQQQ', 'JKL1'],
       'CCCCCC': ['ZXCV', '1234', 'PPPP'], 
       'BBBBBB': ['QWER', 'TYUI', 'ASDF', 'QQQQ'],
       'ZZZZZZ': ['1111']}
      

      【讨论】:

      • @semiflex:听起来你的制表符分隔文件的格式搞砸了。我一般不会在这里发布代码,除非我已经对其进行了测试并且它可以工作(如果它可以在我的系统上运行)。
      猜你喜欢
      • 1970-01-01
      • 2019-02-21
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 2019-10-01
      • 2011-01-31
      相关资源
      最近更新 更多