擅长:python、mysql、java
<p>只是对<a href="https://stackoverflow.com/users/172176/aya">Aya's</a>答案稍加改进,使其更具习惯性(尽管我正在删除一些错误检查,以使机制更直观):</p>
<pre><code>BLOCK_SIZE = 1024
with tarfile.open("zero.tar.gz") as tardude:
for member in tardude.getmembers():
with tardude.extractfile(member.name) as target:
for chunk in iter(lambda: target.read(BLOCK_SIZE), b''):
pass
</code></pre>
<p>这实际上只是删除了<code>while 1:</code>(有时被认为是一个小代码味道)和<code>if not data:</code>检查。还要注意,<code>with</code>的使用将此限制为Python 2.7+</p>