1

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

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

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

4

3 回答 3

8

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

with open(file) as fin:
     rows = ( line.split('\t') for line in fin )
     d = { row[0]:row[1:] for row in rows }
于 2013-02-06T17:01:46.703 回答
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']}
于 2013-02-06T17:40:43.697 回答
-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

于 2013-02-06T17:04:41.220 回答