【发布时间】:2013-11-20 22:22:00
【问题描述】:
为了清楚起见,我对编程很陌生,而且我使用的是 Python 3.3!现在我在相同的基本布局中有很多文件。每个文件有 9 列,制表符分隔和可变数量的标题行 - 但大多数有 5 行。行或列没有标题!
看起来像这样:
#header1
#header2
#header3
#header4
#header5
ID1 asdf asdk asdfk asdfkl adsfkln askdlfn safsda asdf Notes1..
ID2 asdf asdk asdfk asdfkl adsfkln askdlfn safsda asdf Notes2..
ID3 asdf asdk asdfk asdfkl adsfkln askdlfn safsda asdf Notes3..
ID4 asdf asdk asdfk asdfkl adsfkln askdlfn safsda asdf Notes4..
我想要的唯一信息是第一列,其中包含 ID,最后一列包含有关每个 ID 的注释。我正在为类似这样的字典拍摄
{'ID1': [notes1...]
'ID2': [notes2...]....
'ID1234': [notes1234...]}
但我也会对字典列表或类似的东西感到满意。
所以我首先将文本转换为列表列表,以便我可以按索引查找条目:
import csv
list_all = list(csv.reader(open(r'complex_tabbed_file.gff', 'rb'), delimiter='\t'))
d = dict()
ID = data[5][0] #starting at 5 to skip the header lines
notes = data[5][8]
d[ID]= notes
print (d)
这为我提供了我正在寻找的信息,但我一次只读取一个条目。我需要创建一个循环,该循环将读取包含数百个条目的整个文件......关于起点的建议?
我研究发现:Read specific columns from a csv file with csv module?
描述了类似的情况,但编码有点过头了。由于我是新手,我很难将这个示例应用到我的特定案例中 =(
这是我尝试过的迭代:
i=0
if i < 4:
i= i+1
if i >= 5:
ID = list_all[i][0]
notes = list_all[i][8]
i= i+1
print (d)
这会返回一个空字典 ( d={ } ) 不好。
也试过了
d = dict()
i=5
for line in list_all:
ID = list_all[i][0]
notes = list_all[i][8]
i = i+1
print (d)
这给出了非常可爱的“列表索引超出范围”错误消息。非常感谢任何建议,谢谢!
【问题讨论】:
标签: python parsing csv dictionary