我正在尝试将制表符分隔的文本文件加载到python程序中。它具有以下格式,
AAAAAA 1234 5678 90AB QQQQ JKL1
BBBBBB QWER TYUI ASDF QQQQ
CCCCCC ZXCV 1234 PPPP
...
ZZZZZZ 1111
简而言之,每行的列数可变,但总是至少两列,每行中的每列都是唯一的。我希望将第一列用作键,并将其余列加载到列表中,并使用指向它的键。我试着像其他线程中建议的那样查看csv模块,但我还没有找到让它适合我的方法。所以,是的,如果这应该更加明显,这是一个新手问题。
答案 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