Wie entpackst du sehr große Dateien in Python?

Mit python 2.4 und der eingebauten ZipFile Bibliothek kann ich nicht sehr große Zip-Dateien lesen (größer als 1 oder 2 GB), da er den gesamten Inhalt der unkomprimierten Datei im Speicher speichern möchte. Gibt es einen anderen Weg, dies zu tun (entweder mit einer Drittanbieter-Bibliothek oder einem anderen Hack), oder muss ich "out out" und entpacken Sie es auf diese Weise (was nicht als Cross-Plattform, offensichtlich).

  • Python - Kompresse Ascii String
  • Wie kann man den internen Zustand des Zlib-Kompressorobjekts in Python kopieren
  • Zip-Datei mit PPMD-Komprimierung, programmgesteuert entpacken
  • Ist das ein Fehler in dieser gzip-Aufblasmethode?
  • Maschinelles Lernalgorithmus zur Vorhersage der Reihenfolge der Ereignisse?
  • H5py: Zusammengesetzte Datentypen und Skalen-Offset in der Kompressionspipeline
  • Python Format Dezimal mit einer minimalen Anzahl von Dezimalstellen
  • Wie erstelle ich neue Spalten, um die Daten der Duplicate ID Spalte zu speichern?
  • Java: String-Formatierung mit Platzhaltern
  • Python - format float auf dezimal in pyQt
  • Format () float als int
  • Py Pandas .format (Dataframe)
  • 2 Solutions collect form web for “Wie entpackst du sehr große Dateien in Python?”

    Hier ist ein Überblick über die Dekomprimierung von großen Dateien.

     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() 

    Ab Python 2.6 können Sie ZipFile.open() , um ein Dateizugriff auf einer Datei zu öffnen und Inhalte effizient in eine Zieldatei Ihrer Wahl zu kopieren:

     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) 

    Dies verwendet shutil.copyfileobj() , um Daten aus dem offenen Zipfile-Objekt effizient zu lesen und in die Ausgabedatei zu kopieren.

    Python ist die beste Programmiersprache der Welt.