是否有一种有效的方法可以使用python将制表符分隔文件的每一列存储在单独的字典中?
示例输入文件:(实际输入文件包含数千行和数百列。列数不固定,经常更改。)
A B C
1 4 7
2 5 8
3 6 9
我需要在A
列中打印值:
for cell in mydict["A"]:
print cell
并在同一行中打印值:
for i in range(1, numrows):
for key in keysOfMydict:
print mydict[key][i]
答案 0 :(得分:1)
最简单的方法是使用DictReader
模块中的csv
:
with open('somefile.txt', 'r') as f:
reader = csv.DictReader(f, delimiter='\t')
rows = list(reader) # If your file is not large, you can
# consume it entirely
# If your file is large, you might want to
# step over each row:
#for row in reader:
# print(row['A'])
for row in rows:
print(row['A'])
@Marius提出了一个很好的观点 - 您可能希望通过标题分别收集所有列。
如果是这样的话,你必须稍微调整你的阅读逻辑:
from collections import defaultdict
by_column = defaultdict(list)
for row in rows:
for k,v in row.iteritems():
by_column[k].append(v)
另一个选项是pandas
:
>>> import pandas as pd
>>> i = pd.read_csv('foo.csv', sep=' ')
>>> i
A B C
0 1 4 7
1 2 5 8
2 3 6 9
>>> i['A']
0 1
1 2
2 3
Name: A, dtype: int64
答案 1 :(得分:0)
不确定这是否相关,但您可以使用rpy2。
执行此操作from rpy2 import robjects
dframe = robjects.DataFrame.from_csvfile('/your/csv/file.csv', sep=' ')
d = dict([(k, list(v)) for k, v in dframe.items()])
输出:
{'A': [1, 2, 3], 'C': [7, 8, 9], 'B': [4, 5, 6]}