所以这个输入文件已经有换行符了。它是在自然的环境中创造出来的。当我试图识别某些行以便返回并调用所述行的值时,
name = line[2]
IndexError: list index out of range
有什么想法吗?我知道必须有一个简单的解决方案,因为这是相当基本的,但我已经筛选了关于分裂和分裂('\n')的每一个条目,但没有任何工作。如果你们能提供任何帮助,我们将不胜感激!
-Ut prosim
输入
ID rpmI_bact
AC TIGR00001
DE ribosomal protein L35
脚本
for i in info.readlines():
line = i.split('\n')
id_hit = line[0]
ac = line[1]
name = line[2]
print(name)
误差
name = line[2]
IndexError: list index out of range
发布于 2017-10-26 17:18:24
首先,当您执行readlines
时,您将得到 all 文件行的列表,该列表可能如下所示:
[' ID rpmI_bact', ' AC TIGR00001', ' DE ribosomal protein L35']
如果您取其中一个值,然后尝试在换行符上拆分,则不会得到任何拆分:
' ID rpmI_bact'.split('\n')
[' ID rpmI_bact']
请注意,返回值是一个包含一个元素的列表,这就是您获得IndexError
的原因。
现在,您似乎想要取每一行并在空格上拆分吗?如果是这样的话,这样做的方法是使用split(' ')
,但是这会让您返回可能不可靠的内容:
In [8]: for line in lines:
...: print(line.split(' '))
...:
['', '', '', '', 'ID', '', 'rpmI_bact']
['', '', '', '', 'AC', '', 'TIGR00001']
['', '', '', '', 'DE', '', 'ribosomal', 'protein', 'L35']
注意,“内容”在哪里并不明显?我们可以用几种方法解决这个问题。一种是引入regexes,另一种方法是简单地接受不是空字符串的值(注意,False
中的空字符串是y值):
In [9]: bool("")
Out[9]: False
In [10]: for line in lines:
...: print([elem for elem in line.split(' ') if elem])
...:
['ID', 'rpmI_bact']
['AC', 'TIGR00001']
['DE', 'ribosomal', 'protein', 'L35']
现在你必须弄清楚你想用这些清单做什么。不过,我并没有从这个问题中真正明白这一点。
发布于 2017-10-26 17:31:05
我可能会考虑把它做成一本字典。然后,您可以通过2字母键查询它。也不需要.readlines()
。
d = dict(line.strip().split(' ', 2) for line in info)
这应该会给你一本看起来像
{'AC': 'TIGR00001', 'DE': 'ribosomal protein L35', 'ID': 'rpmI_bact'}
然后你就可以访问你感兴趣的ID了
name = d['DE']
https://stackoverflow.com/questions/46966005
复制相似问题