<p>我的第一个建议是在打开文件时使用<code>with</code>语句:</p>
<pre><code>with open("ploop.fa", "r") as file:
FilterOnRegEx(file)
</code></pre>
<p>您的<code>FilterOnRegEx</code>方法的问题是:<code>if ploop in line</code>。带字符串参数的<a href="https://docs.python.org/3/library/stdtypes.html#common-sequence-operations" rel="nofollow">^{<cd4>}</a>运算符在字符串<code>line</code>中搜索<code>ploop</code>中的确切文本。在</p>
<p>相反,您需要<a href="https://docs.python.org/3/library/re.html#re.compile" rel="nofollow">compile</a>将文本形式转换为re对象,然后<a href="https://docs.python.org/3/library/re.html#re.regex.search" rel="nofollow">search</a>来匹配:</p>
^{pr2}$
<p>这将有助于你向前迈进。在</p>
<p>下一步,我建议学习<a href="https://docs.python.org/3/tutorial/classes.html#generators" rel="nofollow">generators</a>。打印匹配的行很好,但这无助于您对它们进行进一步的操作。我可能会将<code>print</code>更改为<code>yield</code>,这样我就可以进一步处理数据,例如提取所需的部分并重新格式化以供输出。在</p>
<p>作为一个简单的演示:</p>
<pre><code>def FilterOnRegEx(file):
ploop = ("[AG].{4}GK[ST]")
pattern = re.compile(ploop)
for line in file:
match = pattern.search(line)
if match is not None:
yield line
with open("ploop.fa", "r") as file:
for line in FilterOnRegEx(file):
print(line)
</code></pre>
<hr/>
<hr/>
<p><em>附录:</em>我使用您发布的数据样本运行了上面我发布的代码,它成功地打印了一些行而不是其他行。换句话说,正则表达式确实匹配某些行,而不匹配其他行。到现在为止,一直都还不错。<em>但是,</em>,您需要的数据并不是全部在输入的一行上!这意味着在模式上过滤单个行是不够的。(当然,除非我在问题中看不到正确的换行符)问题中的数据方式,您需要实现一个更健壮的解析器,该解析器具有状态,以了解记录何时开始、何时结束以及记录中间的任何给定行。在</p>