<p>你甚至不必把所有的行都保存到内存中!你知道吗</p>
<p>效率高的<code>with</code>会自动关闭文件,因此非常有效和有用。你知道吗</p>
<p><strong>注意这两个选项-如果都是关于效率的,选择第一个。你知道吗</p>
<p><strong>我建议</strong><code>return</code>隐藏行而不是<code>print</code>隐藏它-也许你会在其中有额外的用途,然后你可以再次打印,而不是再次运行整个函数。你知道吗</p>
<pre><code>def start_end_points(file_name):
wanted_text = ""
# USE this way -EFFICIENT!
with open(file_name, "r") as f:
found = False
for line in f:
if found:
if "pi-pi stacking interactions:" in line:
break
else:
wanted_text += line
if "Hydrogen bonds:" in line:
wanted_text += line
found = True
# OR use this way *less efficient memory speaking*, but pythonic
with open(file_name, "r") as f:
all = f.read().split('\n')
numbers = [i for i, line in enumerate(all) if "Hydrogen bonds:" in line or "pi-pi stacking interactions:" in line]
wanted_text = all[numbers[0]:numbers[1]]
# eventually, return:
return wanted_text
data = start_end_points("foo.txt")
</code></pre>