Es ist eine Weile her, seit ich diese Routine verwendet habe, also musste ich es ausgraben. Vielleicht möchten Sie Ihre spezifischen Bedürfnisse testen/anpassen.
Die Anweisung if
prüft nur die letzten drei Zeichen des zu extrahierenden Dateinamens. Sie können dies mit einem .split('.')
ändern, um nach der vollständigen Erweiterung zu suchen, da viele Dateien jetzt mehr als 3 Zeichen für die Erweiterung haben.
Dies wurde für Windows geschrieben, und Sie können, wenn läuft auf anderen OSs
Dieser Code bestimmte Bits geändert werden soll, um die Ordnerstruktur zu bewahren, aber wahrscheinlich nicht die schnellste Routine (obwohl ich nie irgendwelche Beschwerden gehabt:
import zipfile
def unzip_file(zippedfile = '', targetdir = '', exclude_ext = ''):
if zippedfile == '': ## this is the .zip file
return
if targetdir == '':
targetdir = os.path.join(os.path.dirname(zippedfile), os.path.basename(zippedfile)[:-4])
if not os.path.exists (targetdir):
os.makedirs (targetdir)
zfile = zipfile.ZipFile(zippedfile)
for name in zfile.namelist():
(dirName, fileName) = os.path.split(name)
if not dirName == '':
if not os.path.exists (os.path.join(targetdir, dirName)):
os.makedirs (os.path.join(targetdir, dirName))
if fileName == '':
# directory
newDir = os.path.join(targetdir, dirName)
if not os.path.exists(newDir):
os.makedirs (newDir)
else:
# file
if exclude_ext == '':
print ('Extracting File : ' + name)
fd = open(os.path.join(targetdir, name), 'wb')
fd.write(zfile.read(name))
fd.close()
else:
if not exclude_ext == name[-3:]:
print ('Extracting File : ' + name)
fd = open(os.path.join(targetdir, name), 'wb')
fd.write(zfile.read(name))
fd.close()
else:
print ('File with extension ' + exclude_ext + ' is excluded')
zfile.close()
return
Viel Glück