所以这个输入文件已经有换行符。这是它创造的自然环境。当我尝试识别某些行以便我可以返回并从所述行调用值时,
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
答案 0 :(得分:0)
首先,当你执行readlines
时,你会得到一个所有列表中的文件列表,这可能看起来像这样:
[' 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']
请注意“内容”的位置并不明显?我们可以通过几种方式解决这个问题。一种是引入正则表达式,而另一种方法是简单地取非空字符串的值(注意Python中的空字符串是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']
现在你必须弄清楚你想对这些列表做些什么。不过,我并没有从问题中得到那个。
答案 1 :(得分:0)
我可能会考虑把它变成字典。然后你可以用2个字母的键来查询它。也不需要 function invalidParamHandler(req, res, next, context) {
const { error, oldQuery, nextQuery, droppedParams } = context;
// Do
}
app.use(queryValidator(invalidParamHandler));
});
。
.readlines()
那应该给你一个字典看起来像
d = dict(line.strip().split(' ', 2) for line in info)
然后您只需访问您感兴趣的ID
{'AC': 'TIGR00001', 'DE': 'ribosomal protein L35', 'ID': 'rpmI_bact'}