扫描txt,将某些数据附加到Python中的空列表中

时间:2012-03-06 04:19:21

标签: python list append

我有一个我在python中阅读的文本文件。 我正在尝试从关键字后面的文本文件中提取某些元素,将它们附加到空列表中。该文件如下所示:

enter image description here

所以我想制作两个空列表

  • 第一个列表将附加序列名称

  • 第二个列表将是一个列表,其中包含[Bacteria,Phylum,Class,Order, Family, Genus, Species]

    格式

    大多数生物将是未培养的细菌。我正在尝试添加具有以下ID的未培养细菌;

无论如何都要扫描某个单词,找到单词后,取出后面的单词[以'\ t'分隔]?

我需要它来创建一个要转换为分类数据的序列名字典。

我知道我需要一个空列表来将名称附加到:

seq_names=[ ]

将分类法列表放入

的第二个列表
taxonomy=[ ]

和每次迭代后将重置的第三个列表

temp = [ ]

我确信它可以在Biopython中完成,但我正在研究我的python技能

2 个答案:

答案 0 :(得分:2)

是的,有办法。

您可以使用内置函数split将从读取文件获得的字符串拆分为数组。从这里你可以找到你要找的单词的索引,然后使用这个索引加一个来得到它之后的单词。例如,使用名为test.text的文本文件看起来像这样(格式有点奇怪,因为SO似乎不喜欢硬标签)。

one two three   four    five    six seven   eight   nine

以下代码

f = open('test.txt','r')

string = f.read()

words = string.split('\t')
ind = words.index('seven')
desired = words[ind+1]

将返回所需的'8'

编辑:返回列表中的每个后续单词

f = open('test.txt','r')

string = f.read()
words = string.split('\t')

desired = [words[ind+1] for ind, word in enumerate(words) if word == "seven"]

这是使用列表推导。它列举了单词列表,如果单词是您要查找的单词,则在列表的下一个索引处包含该单词。

Edit2:要在新行和标签上拆分它,您可以使用正则表达式

import re
f = open('testtest.txt','r')

string = f.read()

words = re.split('\t|\n',string)

desired = [words[ind+1] for ind, word in enumerate(words) if word == "seven"]

答案 1 :(得分:1)

听起来你可能想要一个按序列名称索引的词典。例如,

my_data = {
           'some_sequence': [Bacteria,Phylum,Class,Order, Family, Genus, Species],
           'some_other_sequence': [Bacteria,Phylum,Class,Order, Family, Genus, Species]
          }

然后,您只需访问my_data['some_sequence']即可获取有关该序列的数据。

要填充数据结构,我只需循环遍历文件行.split('\t'),将它们分成“列”,然后执行类似my_data[the_row[0]] = [the_row[10], the_row[11], the_row[13]...]的操作,将行加载到字典中。

所以,

for row in inp_file.readlines():
    row = row.split('\t')
    my_data[row[0]] = [row[10], row[11], row[13], ...]