<p>我认为这样更有效,因为您可以在<code>f</code>上迭代,所以您可以保存这个列表转换<code>lines = f.readlines()</code>。此外,此代码只在数据中运行一次(使用2个while循环),其中代码使用2个for循环运行到文件末尾。你知道吗</p>
<pre><code>from pprint import pprint
def start_end_points(file_name):
f = open(file_name)
single_line = next(f)
while "Hydrogen bonds:" not in single_line:
single_line = next(f)
result = []
while "pi-pi stacking interactions:" not in single_line:
result.append(single_line.rstrip())
single_line = next(f)
f.close()
pprint(result)
</code></pre>
<p>重要注意事项:打开文件后,仍然可以修改它。因此,在<code>while</code>循环中读取的行可能不是打开<code>f</code>时所想到的行。你知道吗</p>
<p>输出btw:</p>
<pre><code>['Hydrogen bonds:',
' Location of Donor | Sidechain/Backbone | Secondary Structure | Count',
' -| | -| -',
' LIGAND | SIDECHAIN | OTHER | 1',
'',
' RECEPTOR | BACKBONE | BETA | 1',
'',
'Raw data:',
' ATP(1):O2A(9) - A:ILE(61):HN(93) - A:ILE(61):N(92)',
'',
'Hydrophobic contacts (C-C):',
' Sidechain/Backbone | Secondary Structure | Count',
' | -| -',
' SIDECHAIN | OTHER | 2',
' SIDECHAIN | BETA | 23',
'',
'Raw data:',
' ATP(1):C39(3) - A:TYR(58):CD2(67)',
' ATP(1):C39(3) - A:TYR(58):CE2(69)',
' ATP(1):C59(6) - A:ILE(61):CD1(100)',
' ATP(1):C59(6) - A:LYS(87):CE(344)',
' ATP(1):C4(23) - A:PHE(209):CD1(1562)',
' ATP(1):C4(23) - A:PHE(209):CE1(1564)',
' ATP(1):C2(26) - A:PHE(209):CD2(1563)',
' ATP(1):C6(28) - A:PHE(209):CB(1560)',
' ATP(1):C6(28) - A:PHE(209):CG(1561)',
' ATP(1):C6(28) - A:PHE(209):CD1(1562)',
' ATP(1):C6(28) - A:VAL(286):CG2(2266)',
'']
</code></pre>