gpt4 book ai didi

python - 用于在 Python 中解析复杂制表符分隔/csv 文件的循环

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:08 24 4
gpt4 key购买 nike

需要说明的是,我是编程新手,我使用的是 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)

这给出了非常可爱的“列表索引超出范围”错误消​​息。如果有任何建议,我将不胜感激,谢谢!

最佳答案

您可以解决它迭代每一行并丢弃那些只有一个字段(标题)的问题:

import csv
import sys

d = dict()

with open(sys.argv[1], newline='') as csvfile:
csvreader = csv.reader(csvfile, delimiter='\t')
for row in csvreader:
if len(row) == 1: continue
_d = {row[0]: [row[-1]]}
d.update(_d)

print(d)

像这样运行它:

python3 script.py infile

产生:

{
'ID4': ['Notes4..'],
'ID1': ['Notes1..'],
'ID2': ['Notes2..'],
'ID3': ['Notes3..']
}

关于python - 用于在 Python 中解析复杂制表符分隔/csv 文件的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20108308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com