从制表符分隔文件的列表字典

时间:2013-02-06 16:59:38

标签: python list csv dictionary

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

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

简而言之,每行的列数可变,但总是至少两列,每行中的每列都是唯一的。我希望将第一列用作键,并将其余列加载到列表中,并使用指向它的键。我试着像其他线程中建议的那样查看csv模块,但我还没有找到让它适合我的方法。所以,是的,如果这应该更加明显,这是一个新手问题。

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

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