<p>有很多方法可以做到这一点。有一种方法。
如果数据在名为<code>data</code>的文件中:</p>
<pre><code>import re
def open_chunk(readfunc, delimiter, chunksize=1024):
"""
http://stackoverflow.com/a/17508761/190597
readfunc(chunksize) should return a string.
"""
remainder = ''
for chunk in iter(lambda: readfunc(chunksize), ''):
pieces = re.split(delimiter, remainder + chunk)
for piece in pieces[:-1]:
yield piece
remainder = pieces[-1]
if remainder:
yield remainder
with open('data', 'r') as infile:
chunks = open_chunk(infile.read, delimiter=r'(PMID.*)')
for i, (chunk, delim) in enumerate(zip(*[chunks]*2)):
chunk = chunk+delim
chunk = chunk.strip()
if chunk:
print(chunk)
print('-'*80)
# uncomment this if you want to save the chunk to a file named dataXXX
# with open('data{:03d}'.format(i), 'w') as outfile:
# outfile.write(chunk)
</code></pre>
<p>印刷品</p>
^{pr2}$
<p>取消最后两行的注释以将块保存到单独的文件中。在</p>
<hr/>
<p>为什么这么复杂?</strong></p>
<p>对于短文件,您可以简单地将整个文件读入一个字符串,然后使用正则表达式拆分字符串。上面的解决方案是对这种可以处理大文件的思想的改编。它以块的形式读取文件,找到要拆分块的位置,并在找到块时返回块。在</p>
<p>处理由分隔符regex模式分隔的文件块的问题经常出现。因此,与其为每一个都编写一个定制的解决方案,不如使用像<code>open_chunk</code>这样的实用程序函数来处理所有这些问题,而不管分隔符是什么,而且它的处理方式既可以处理大文件,也可以处理小文件。在</p>