我试图使用line.split('\ n) - >从类似文件的目录中打印几个关键行。没有识别线条

时间:2017-10-27 01:06:06

标签: python

所以这个输入文件已经有换行符。这是它创造的自然环境。当我尝试识别某些行以便我可以返回并从所述行调用值时,

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

2 个答案:

答案 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'}