擅长:python、mysql、java
<p>对于77GB的文件,可能需要提前做一些准备,以避免在字符串中重复搜索。我认为这会给你同样的答案,但可能会更有效,因为它使用集合来确定令牌的存在,而不是在字符串中搜索。还请注意,您的原始算法假设大小写匹配-通过强制集的内容为小写并强制测试的标记也为小写,从而使比较不区分大小写是很简单的。python3也是冻结集。在</p>
<p>我想你的意思是,如果属和种中的一个都存在,就应该打印一行:</p>
<pre><code>listofspecies = open("bacreduced.txt").readlines()
species_1 = []
species_2 = []
for line in listofspecies:
species = line.strip().split('_')
species_1.append(species[0])
species_2.append(species[1])
species_1 = frozenset(species_1)
species_2 = frozenset(species_2)
with open("Bac16s.faa") as f:
for line in f:
if not line[0] == '>':
continue
line_tokens = line[1:].strip().split('_')
if (line_tokens[0] in species_1) and (line_tokens[1] in species_2):
print(line_tokens[0] + '_' + line_tokens[1])
</code></pre>
<p>但是,如果你想打印一条线,如果只存在属和种的精确组合,那么实际上要容易得多:</p>
^{pr2}$