使用python 2.4和內置的ZipFile
庫,我無法讀取非常大的zip文件(大於1或2 GB),因爲它想要將未壓縮文件的全部內容存儲在內存中。還有另一種方法可以做到這一點(無論是第三方庫還是其他黑客),還是我必須「掏空」並以這種方式解壓縮(顯然,這不是跨平臺的)。如何在python中解壓非常大的文件?
15
A
回答
16
下面是大文件解壓的概述。
import zipfile
import zlib
import os
src = open(doc, "rb")
zf = zipfile.ZipFile(src)
for m in zf.infolist():
# Examine the header
print m.filename, m.header_offset, m.compress_size, repr(m.extra), repr(m.comment)
src.seek(m.header_offset)
src.read(30) # Good to use struct to unpack this.
nm= src.read(len(m.filename))
if len(m.extra) > 0: ex= src.read(len(m.extra))
if len(m.comment) > 0: cm= src.read(len(m.comment))
# Build a decompression object
decomp= zlib.decompressobj(-15)
# This can be done with a loop reading blocks
out= open(m.filename, "wb")
result= decomp.decompress(src.read(m.compress_size))
out.write(result)
result = decomp.flush()
out.write(result)
# end of the loop
out.close()
zf.close()
src.close()
8
對於Python 2.6,你可以使用ZipFile.open()
打開一個文件句柄上的文件,有效的內容複製到您選擇的目標文件:
import errno
import os
import shutil
import zipfile
TARGETDIR = '/foo/bar/baz'
with open(doc, "rb") as zipsrc:
zfile = zipfile.ZipFile(zipsrc)
for member in zfile.infolist():
target_path = os.path.join(TARGETDIR, member.filename)
if target_path.endswith('/'): # folder entry, create
try:
os.makedirs(target_path)
except (OSError, IOError) as err:
# Windows may complain if the folders already exist
if err.errno != errno.EEXIST:
raise
continue
with open(target_path, 'wb') as outfile, zfile.open(member) as infile:
shutil.copyfileobj(infile, outfile)
這使用shutil.copyfileobj()
高效地閱讀來自打開的zipfile對象的數據,將其複製到輸出文件。
相關問題
- 1. Python json解析非常大的文件
- 2. 如何在壓縮文件中使用非ASCII文件名並在Python 2.4中使用ZipFile將其解壓縮?
- 3. 如何在java中解壓非UTF8格式的文件
- 4. 解壓Z01,Z02,壓縮在Python文件
- 5. Python xml ElementTree能解析一個非常大的xml文件嗎?
- 6. 在java和python中解析非常大的bz2 xml文件(逐個元素)
- 7. 在python中解壓縮文件
- 8. 如何解壓/解壓縮文件
- 9. 如何解析非常大的圖像?
- 10. 解壓縮Windows手機中的大文件導致OutOfMemory異常
- 11. 使用Imagemagick壓縮非常大的分辨率圖像文件
- 12. 在python中壓縮和解壓縮文本文件
- 13. 如何在python中壓縮文件
- 14. 如何在C#中讀取非常龐大的文件?
- 15. 如何在HTML5中渲染非常大的SVG文件?
- 16. 如何使用子進程在python中解壓gz文件
- 17. 的ffmpeg在非常大的文件
- 18. .NET中的非常大的XML文件
- 19. 我應該如何解壓縮AsyncTask.doInBackground中的大數據文件?
- 20. 如何解壓gzip文件
- 21. 在iphone sdk中解壓縮文件的最大大小?
- 22. laravel app.js非常大的文件大小
- 23. 在非常短的時間內連接非常大(〜TByte)文件
- 24. NSIS:如何解壓7zip壓縮文件
- 25. 如何在文件解壓縮嵌套循環:Python的
- 26. 如何解壓縮由大型機中的PKZIP壓縮文件由Java?
- 27. Flex的解壓縮/解壓縮大文件
- 28. 解壓壓縮文件...文件未發現異常
- 29. zlib:解壓縮的文件大小?
- 30. 如何在asp.net框架4.0中壓縮/解壓縮文件夾
這正是我所尋找的 - 謝謝! – 2008-12-04 03:55:34