我有一个我在python中阅读的文本文件。 我正在尝试从关键字后面的文本文件中提取某些元素,将它们附加到空列表中。该文件如下所示:
所以我想制作两个空列表
第一个列表将附加序列名称
第二个列表将是一个列表,其中包含[Bacteria,Phylum,Class,Order, Family, Genus, Species]
大多数生物将是未培养的细菌。我正在尝试添加具有以下ID的未培养细菌;
无论如何都要扫描某个单词,找到单词后,取出后面的单词[以'\ t'分隔]?
我需要它来创建一个要转换为分类数据的序列名字典。
我知道我需要一个空列表来将名称附加到:
seq_names=[ ]
将分类法列表放入
的第二个列表taxonomy=[ ]
和每次迭代后将重置的第三个列表
temp = [ ]
我确信它可以在Biopython中完成,但我正在研究我的python技能
答案 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], ...]