Verwenden Sie nicht die in der akzeptierten Antwort vorgeschlagene Lösung, sondern die weiter unten verwendete make_archivevon shutil(wenn Sie ein einzelnes Verzeichnis rekursiv komprimieren möchten).
Malana
Antworten:
526
Wie andere bereits betont haben, sollten Sie zipfile verwenden . In der Dokumentation erfahren Sie, welche Funktionen verfügbar sind, es wird jedoch nicht erläutert, wie Sie damit ein gesamtes Verzeichnis komprimieren können. Ich denke, es ist am einfachsten, mit einem Beispielcode zu erklären:
#!/usr/bin/env pythonimport os
import zipfile
def zipdir(path, ziph):# ziph is zipfile handlefor root, dirs, files in os.walk(path):for file in files:
ziph.write(os.path.join(root, file))if __name__ =='__main__':
zipf = zipfile.ZipFile('Python.zip','w', zipfile.ZIP_DEFLATED)
zipdir('tmp/', zipf)
zipf.close()
Ich würde dem Schreibaufruf ein zweites Argument hinzufügen und übergeben os.path.relpath(os.path.join(root, file), os.path.join(path, '..')). Auf diese Weise können Sie ein Verzeichnis aus einem beliebigen Arbeitsverzeichnis komprimieren, ohne die vollständigen absoluten Pfade im Archiv abzurufen.
Reimund
8
Es gibt eine lustige Rekursion, wenn ich versuche, einen Ordner zu komprimieren und die resultierende Zip-Datei in denselben Ordner auszugeben. :-)
Sibbs Gambling
13
shutilmacht es wirklich einfach in nur einer Zeile. Bitte überprüfen Sie die Antwort unten ..
Droidlabour
7
Sie könnten mehr interessiert sein, wenn Sie ziph.write (os.path.join (Pfad, Datei), arcname = Datei) ausführen, damit die Dateinamen im Archiv nicht relativ zur Festplatte sind
Christophe Blin
1
Ah, ich habe den .close()Anruf verpasst !
information_interchange
1062
Der einfachste Weg ist zu verwenden shutil.make_archive. Es unterstützt sowohl Zip- als auch Teerformate.
Wenn Sie etwas Komplizierteres tun müssen, als das gesamte Verzeichnis zu komprimieren (z. B. bestimmte Dateien zu überspringen), müssen Sie sich zipfilewie von anderen vorgeschlagen in das Modul vertiefen .
shutilist Teil der Standard-Python-Bibliothek. Dies sollte die beste Antwort sein
AlexG
4
Dies ist hier die prägnanteste Antwort und hat auch den Vorteil, dass alle Unterverzeichnisse und Dateien direkt zum Archiv hinzugefügt werden, anstatt dass alles in einem Ordner der obersten Ebene enthalten ist (was beim Entpacken zu einer redundanten Ebene in der Ordnerstruktur führt).
Aitch-Hut
3
@cmcginty Könnten Sie bitte etwas genauer sagen, welcher Aspekt davon nicht threadsicher ist? Wird der Interpreter abstürzen, wenn mehrere Threads ausgeführt werden, während einer dies aufruft?
std''OrgnlDave
13
Seien Sie gewarnt, dass shutil.make_archive vor Python 3.4 ZIP64 nicht unterstützt und beim Erstellen von ZIP-Dateien mit mehr als 2 GB fehlschlägt.
Azdev
2
@Teekin Nein. Wenn Sie sich den Fehlerbericht (bugs.python.org/issue30511) ansehen, werden Sie sehen, dass er shutil.make_archiveverwendet wird os.chdir(). Nach dem, worüber ich lese os.chdir(), ist es global tätig.
Sam Malayek
65
So fügen Sie den Inhalt mydirectoryeiner neuen Zip-Datei hinzu, einschließlich aller Dateien und Unterverzeichnisse:
import os
import zipfile
zf = zipfile.ZipFile("myzipfile.zip","w")for dirname, subdirs, files in os.walk("mydirectory"):
zf.write(dirname)for filename in files:
zf.write(os.path.join(dirname, filename))
zf.close()
Für mich wirft dieser Code unter Fehler TypeError: ungültige Datei: <zipfile.ZipFile [geschlossen]>
Nishad Up
10
Kannst du nicht a verwenden, withanstatt close()dich am Ende selbst anrufen zu müssen?
ArtOfWarfare
50
Wie kann ich ein Zip-Archiv einer Verzeichnisstruktur in Python erstellen?
In einem Python-Skript
Hat in Python 2.7+ shutileine make_archiveFunktion.
from shutil import make_archive
make_archive('zipfile_name','zip',# the archive format - or tar, bztar, gztar
root_dir=None,# root for archive - current working dir if None
base_dir=None)# start archiving from here - cwd if None too
Hier wird das komprimierte Archiv benannt zipfile_name.zip. Wenn base_dires weiter unten root_dirliegt, werden Dateien ausgeschlossen, die sich nicht in der befinden base_dir, aber dennoch die Dateien in den übergeordneten Verzeichnissen bis zum archivieren root_dir.
Ich hatte ein Problem beim Testen auf Cygwin mit 2.7 - es möchte ein root_dir-Argument für cwd:
make_archive('zipfile_name','zip', root_dir='.')
Verwenden von Python aus der Shell
Sie können dies mit Python aus der Shell auch mit dem zipfileModul tun :
$ python -m zipfile -c zipname sourcedir
Wo zipnameist der Name der gewünschten .zipZieldatei (hinzufügen, wenn Sie es wollen, wird es nicht automatisch tun) und Sourcedir ist der Pfad zum Verzeichnis.
Python komprimieren (oder einfach kein übergeordnetes Verzeichnis wollen):
Wenn Sie versuchen, ein Python-Paket mit einem __init__.pyund zu komprimieren __main__.py, und Sie das übergeordnete Verzeichnis nicht möchten, ist dies der Fall
$ python -m zipfile -c zipname sourcedir/*
Und
$ python zipname
würde das Paket ausführen. (Beachten Sie, dass Sie keine Unterpakete als Einstiegspunkt aus einem komprimierten Archiv ausführen können.)
Eine Python-App komprimieren:
Wenn Sie Python3.5 + haben und speziell ein Python-Paket komprimieren möchten, verwenden Sie zipapp :
Diese Funktion komprimiert rekursiv einen Verzeichnisbaum, komprimiert die Dateien und zeichnet die korrekten relativen Dateinamen im Archiv auf. Die Archiveinträge sind die gleichen wie die von zip -r output.zip source_dir.
import os
import zipfile
def make_zipfile(output_filename, source_dir):
relroot = os.path.abspath(os.path.join(source_dir, os.pardir))with zipfile.ZipFile(output_filename,"w", zipfile.ZIP_DEFLATED)as zip:for root, dirs, files in os.walk(source_dir):# add directory (needed for empty dirs)
zip.write(root, os.path.relpath(root, relroot))for file in files:
filename = os.path.join(root, file)if os.path.isfile(filename):# regular files only
arcname = os.path.join(os.path.relpath(root, relroot), file)
zip.write(filename, arcname)
Ich habe einige Änderungen am Code von Mark Byers vorgenommen . Die folgende Funktion fügt auch leere Verzeichnisse hinzu, wenn Sie diese haben. Beispiele sollten klarer machen, welcher Pfad der Zip hinzugefügt wird.
#!/usr/bin/env pythonimport os
import zipfile
def addDirToZip(zipHandle, path, basePath=""):"""
Adding directory given by \a path to opened zip file \a zipHandle
@param basePath path that will be removed from \a path when adding to archive
Examples:
# add whole "dir" to "test.zip" (when you open "test.zip" you will see only "dir")
zipHandle = zipfile.ZipFile('test.zip', 'w')
addDirToZip(zipHandle, 'dir')
zipHandle.close()
# add contents of "dir" to "test.zip" (when you open "test.zip" you will see only it's contents)
zipHandle = zipfile.ZipFile('test.zip', 'w')
addDirToZip(zipHandle, 'dir', 'dir')
zipHandle.close()
# add contents of "dir/subdir" to "test.zip" (when you open "test.zip" you will see only contents of "subdir")
zipHandle = zipfile.ZipFile('test.zip', 'w')
addDirToZip(zipHandle, 'dir/subdir', 'dir/subdir')
zipHandle.close()
# add whole "dir/subdir" to "test.zip" (when you open "test.zip" you will see only "subdir")
zipHandle = zipfile.ZipFile('test.zip', 'w')
addDirToZip(zipHandle, 'dir/subdir', 'dir')
zipHandle.close()
# add whole "dir/subdir" with full path to "test.zip" (when you open "test.zip" you will see only "dir" and inside it only "subdir")
zipHandle = zipfile.ZipFile('test.zip', 'w')
addDirToZip(zipHandle, 'dir/subdir')
zipHandle.close()
# add whole "dir" and "otherDir" (with full path) to "test.zip" (when you open "test.zip" you will see only "dir" and "otherDir")
zipHandle = zipfile.ZipFile('test.zip', 'w')
addDirToZip(zipHandle, 'dir')
addDirToZip(zipHandle, 'otherDir')
zipHandle.close()
"""
basePath = basePath.rstrip("\\/")+""
basePath = basePath.rstrip("\\/")for root, dirs, files in os.walk(path):# add dir itself (needed for empty dirs
zipHandle.write(os.path.join(root,"."))# add filesfor file in files:
filePath = os.path.join(root, file)
inZipPath = filePath.replace(basePath,"",1).lstrip("\\/")#print filePath + " , " + inZipPath
zipHandle.write(filePath, inZipPath)
Modernes Python (3.6+) verwendet das pathlibModul zur präzisen OOP-ähnlichen Behandlung von Pfaden und pathlib.Path.rglob()zum rekursiven Globbing. Soweit ich das beurteilen kann, entspricht dies der Antwort von George V. Reilly: Zips mit Komprimierung, das oberste Element ist ein Verzeichnis, hält leere Verzeichnisse, verwendet relative Pfade.
from pathlib importPathfrom zipfile import ZIP_DEFLATED,ZipFilefrom os importPathLikefrom typing importUniondef zip_dir(zip_name: str, source_dir:Union[str,PathLike]):
src_path =Path(source_dir).expanduser().resolve(strict=True)withZipFile(zip_name,'w', ZIP_DEFLATED)as zf:for file in src_path.rglob('*'):
zf.write(file, file.relative_to(src_path.parent))
Wenn Sie eine Funktionalität wie den Komprimierungsordner eines gängigen grafischen Dateimanagers wünschen, können Sie den folgenden Code verwenden, er verwendet das zipfile- Modul. Mit diesem Code haben Sie die Zip-Datei mit dem Pfad als Stammordner.
import os
import zipfile
def zipdir(path, ziph):# Iterate all the directories and filesfor root, dirs, files in os.walk(path):# Create a prefix variable with the folder structure inside the path folder. # So if a file is at the path directory will be at the root directory of the zip file# so the prefix will be empty. If the file belongs to a containing folder of path folder # then the prefix will be that folder.if root.replace(path,'')=='':
prefix =''else:# Keep the folder structure after the path folder, append a '/' at the end # and remome the first character, if it is a '/' in order to have a path like # folder1/folder2/file.txt
prefix = root.replace(path,'')+'/'if(prefix[0]=='/'):
prefix = prefix[1:]for filename in files:
actual_file_path = root +'/'+ filename
zipped_file_path = prefix + filename
zipf.write( actual_file_path, zipped_file_path)
zipf = zipfile.ZipFile('Python.zip','w', zipfile.ZIP_DEFLATED)
zipdir('/tmp/justtest/', zipf)
zipf.close()
cwd = os.getcwd()
files =[os.path.join(cwd, f)for f in['dir4','root.txt']]with zipfile.ZipFile("selective.zip","w")as myzip:for f in files:
zipall(myzip, f)
Oder einfach listdirim Skriptaufrufverzeichnis und fügen Sie alles von dort hinzu:
with zipfile.ZipFile("listdir.zip","w")as myzip:for f in os.listdir():if f =="listdir.zip":# Creating a listdir.zip in the same directory# will include listdir.zip inside itself, beware of thiscontinue
zipall(myzip, f)
So viele Antworten hier, und ich hoffe, ich kann mit meiner eigenen Version einen Beitrag leisten, die (übrigens) auf der ursprünglichen Antwort basiert, aber mit einer grafischeren Perspektive, wobei auch der Kontext für jedes zipfileSetup und jede Sortierung verwendet wirdos.walk() , um eine zu haben geordnete Ausgabe.
Mit diesen Ordnern und diesen Dateien (unter anderem) wollte ich .zipfür jeden cap_Ordner eine erstellen :
Hier ist, was ich angewendet habe, mit Kommentaren zum besseren Verständnis des Prozesses.
$ cat zip_cap_dirs.py
""" Zip 'cap_*' directories. """import os
import zipfile as zf
for root, dirs, files in sorted(os.walk('.')):if'cap_'in root:print(f"Compressing: {root}")# Defining .zip name, according to Capítulo.
cap_dir_zip ='{}.zip'.format(root)# Opening zipfile context for current root dir. with zf.ZipFile(cap_dir_zip,'w', zf.ZIP_DEFLATED)as new_zip:# Iterating over os.walk list of files for the current root dir. for f in files:# Defining relative path to files from current root dir.
f_path = os.path.join(root, f)# Writing the file on the .zip file of the context
new_zip.write(f_path)
Grundsätzlich öffne os.walk(path)ich für jede Iteration einen Kontext zum zipfileEinrichten und iteriere anschließend die Iteration files, bei der es sich um eine listDatei aus dem rootVerzeichnis handelt, wobei der relative Pfad für jede Datei basierend auf dem aktuellen rootVerzeichnis gebildet wird und an das angehängt wirdzipfile laufenden Kontext angehängt wird .
Hier ist ein moderner Ansatz mit Pathlib und einem Kontextmanager. Fügt die Dateien direkt in die Zip-Datei und nicht in einen Unterordner ein.
def zip_dir(filename: str, dir_to_zip: pathlib.Path):with zipfile.ZipFile(filename,'w', zipfile.ZIP_DEFLATED)as zipf:# Use glob instead of iterdir(), to cover all subdirectories.for directory in dir_to_zip.glob('**'):for file in directory.iterdir():ifnot file.is_file():continue# Strip the first component, so we don't create an uneeded subdirectory# containing everything.
zip_path = pathlib.Path(*file.parts[1:])# Use a string, since zipfile doesn't support pathlib directly.
zipf.write(str(file), str(zip_path))
Ich habe eine Funktion vorbereitet, indem ich die Lösung von Mark Byers mit den Kommentaren von Reimund und Morten Zilmer (relativer Pfad und einschließlich leerer Verzeichnisse) konsolidiert habe. Als Best PracticewithWird bei der Dateikonstruktion von ZipFile verwendet.
Die Funktion bereitet auch einen Standardnamen für die ZIP-Datei mit dem Namen des komprimierten Verzeichnisses und der Erweiterung '.zip' vor. Daher funktioniert es nur mit einem Argument: dem zu komprimierenden Quellverzeichnis.
# import required python modules# You have to install zipfile package using pip installimport os,zipfile
# Change the directory where you want your new zip file to be
os.chdir('Type your destination')# Create a new zipfile ( I called it myfile )
zf = zipfile.ZipFile('myfile.zip','w')# os.walk gives a directory tree. Access the files using a for loopfor dirnames,folders,files in os.walk('Type your directory'):
zf.write('Type your Directory')for file in files:
zf.write(os.path.join('Type your directory',file))
Nachdem ich die Vorschläge gelesen hatte, kam ich auf eine sehr ähnliche Art und Weise, die mit 2.7.x funktioniert, ohne "lustige" Verzeichnisnamen (absolut ähnliche Namen) zu erstellen, und nur den angegebenen Ordner innerhalb der Zip-Datei erstellt.
Oder nur für den Fall, dass Ihre Zip-Datei einen Ordner mit dem Inhalt des ausgewählten Verzeichnisses enthalten muss.
def zipDir( path, ziph ):"""
Inserts directory (path) into zipfile instance (ziph)
"""for root, dirs, files in os.walk( path ):for file in files :
ziph.write( os.path.join( root, file ), os.path.basename( os.path.normpath( path ))+"\\"+ file )def makeZip( pathToFolder ):"""
Creates a zip file with the specified folder
"""
zipf = zipfile.ZipFile( pathToFolder +'file.zip','w', zipfile.ZIP_DEFLATED )
zipDir( pathToFolder, zipf )
zipf.close()print("Zip file saved to: "+ pathToFolder)
makeZip("c:\\path\\to\\folder\\to\\insert\\into\\zipfile")
def CREATEZIPFILE(zipname, path):#function to create a zip file#Parameters: zipname - name of the zip file; path - name of folder/file to be put in zip file
zipf = zipfile.ZipFile(zipname,'w', zipfile.ZIP_DEFLATED)
zipf.setpassword(b"password")#if you want to set password to zipfile#checks if the path is file or directoryif os.path.isdir(path):for files in os.listdir(path):
zipf.write(os.path.join(path, files), files)elif os.path.isfile(path):
zipf.write(os.path.join(path), path)
zipf.close()
make_archive
vonshutil
(wenn Sie ein einzelnes Verzeichnis rekursiv komprimieren möchten).Antworten:
Wie andere bereits betont haben, sollten Sie zipfile verwenden . In der Dokumentation erfahren Sie, welche Funktionen verfügbar sind, es wird jedoch nicht erläutert, wie Sie damit ein gesamtes Verzeichnis komprimieren können. Ich denke, es ist am einfachsten, mit einem Beispielcode zu erklären:
Angepasst von: http://www.devshed.com/c/a/Python/Python-UnZipped/
quelle
os.path.relpath(os.path.join(root, file), os.path.join(path, '..'))
. Auf diese Weise können Sie ein Verzeichnis aus einem beliebigen Arbeitsverzeichnis komprimieren, ohne die vollständigen absoluten Pfade im Archiv abzurufen.shutil
macht es wirklich einfach in nur einer Zeile. Bitte überprüfen Sie die Antwort unten ...close()
Anruf verpasst !Der einfachste Weg ist zu verwenden
shutil.make_archive
. Es unterstützt sowohl Zip- als auch Teerformate.Wenn Sie etwas Komplizierteres tun müssen, als das gesamte Verzeichnis zu komprimieren (z. B. bestimmte Dateien zu überspringen), müssen Sie sich
zipfile
wie von anderen vorgeschlagen in das Modul vertiefen .quelle
shutil
ist Teil der Standard-Python-Bibliothek. Dies sollte die beste Antwort seinshutil.make_archive
verwendet wirdos.chdir()
. Nach dem, worüber ich leseos.chdir()
, ist es global tätig.So fügen Sie den Inhalt
mydirectory
einer neuen Zip-Datei hinzu, einschließlich aller Dateien und Unterverzeichnisse:quelle
with
anstattclose()
dich am Ende selbst anrufen zu müssen?In einem Python-Skript
Hat in Python 2.7+
shutil
einemake_archive
Funktion.Hier wird das komprimierte Archiv benannt
zipfile_name.zip
. Wennbase_dir
es weiter untenroot_dir
liegt, werden Dateien ausgeschlossen, die sich nicht in der befindenbase_dir
, aber dennoch die Dateien in den übergeordneten Verzeichnissen bis zum archivierenroot_dir
.Ich hatte ein Problem beim Testen auf Cygwin mit 2.7 - es möchte ein root_dir-Argument für cwd:
Verwenden von Python aus der Shell
Sie können dies mit Python aus der Shell auch mit dem
zipfile
Modul tun :Wo
zipname
ist der Name der gewünschten.zip
Zieldatei (hinzufügen, wenn Sie es wollen, wird es nicht automatisch tun) und Sourcedir ist der Pfad zum Verzeichnis.Python komprimieren (oder einfach kein übergeordnetes Verzeichnis wollen):
Wenn Sie versuchen, ein Python-Paket mit einem
__init__.py
und zu komprimieren__main__.py
, und Sie das übergeordnete Verzeichnis nicht möchten, ist dies der FallUnd
würde das Paket ausführen. (Beachten Sie, dass Sie keine Unterpakete als Einstiegspunkt aus einem komprimierten Archiv ausführen können.)
Eine Python-App komprimieren:
Wenn Sie Python3.5 + haben und speziell ein Python-Paket komprimieren möchten, verwenden Sie zipapp :
quelle
Diese Funktion komprimiert rekursiv einen Verzeichnisbaum, komprimiert die Dateien und zeichnet die korrekten relativen Dateinamen im Archiv auf. Die Archiveinträge sind die gleichen wie die von
zip -r output.zip source_dir
.quelle
Verwenden Sie shutil, das Teil des Python-Standardbibliothekssatzes ist. Die Verwendung von shutil ist so einfach (siehe Code unten):
Code:
quelle
Überprüfen Sie diesen Link , um der resultierenden Zip-Datei eine Komprimierung hinzuzufügen .
Du musst dich ändern:
zu
quelle
Ich habe einige Änderungen am Code von Mark Byers vorgenommen . Die folgende Funktion fügt auch leere Verzeichnisse hinzu, wenn Sie diese haben. Beispiele sollten klarer machen, welcher Pfad der Zip hinzugefügt wird.
Oben ist eine einfache Funktion, die für einfache Fälle funktionieren sollte. Eine elegantere Klasse finden Sie in meinem Gist: https://gist.github.com/Eccenux/17526123107ca0ac28e6
quelle
Modernes Python (3.6+) verwendet das
pathlib
Modul zur präzisen OOP-ähnlichen Behandlung von Pfaden undpathlib.Path.rglob()
zum rekursiven Globbing. Soweit ich das beurteilen kann, entspricht dies der Antwort von George V. Reilly: Zips mit Komprimierung, das oberste Element ist ein Verzeichnis, hält leere Verzeichnisse, verwendet relative Pfade.Hinweis: Wie optionale Typhinweise anzeigen,
zip_name
kann es sich nicht um ein Pfadobjekt handeln (wird in 3.6.2+ behoben ).quelle
Ich habe ein anderes Codebeispiel, das mit Python3, Pathlib und Zipfile helfen kann. Es sollte in jedem Betriebssystem funktionieren.
quelle
Sie möchten sich wahrscheinlich das
zipfile
Modul ansehen . Eine Dokumentation finden Sie unter http://docs.python.org/library/zipfile.html .Möglicherweise möchten Sie auch die
os.walk()
Verzeichnisstruktur indizieren.quelle
Hier ist eine Variation der Antwort von Nux, die für mich funktioniert:
quelle
Probieren Sie die folgende aus. Es hat bei mir funktioniert .
quelle
Wenn Sie eine Funktionalität wie den Komprimierungsordner eines gängigen grafischen Dateimanagers wünschen, können Sie den folgenden Code verwenden, er verwendet das zipfile- Modul. Mit diesem Code haben Sie die Zip-Datei mit dem Pfad als Stammordner.
quelle
Um mehr Flexibilität zu bieten, z. B. Verzeichnis / Datei nach Namen auswählen, verwenden Sie:
Für einen Dateibaum:
Sie können zB nur auswählen
dir4
undroot.txt
:Oder einfach
listdir
im Skriptaufrufverzeichnis und fügen Sie alles von dort hinzu:quelle
Angenommen, Sie möchten alle Ordner (Unterverzeichnisse) im aktuellen Verzeichnis komprimieren.
quelle
So behalten Sie die Ordnerhierarchie unter dem zu archivierenden übergeordneten Verzeichnis bei:
Wenn Sie möchten, können Sie dies ändern, um es
pathlib
für das Globbing von Dateien zu verwenden .quelle
So viele Antworten hier, und ich hoffe, ich kann mit meiner eigenen Version einen Beitrag leisten, die (übrigens) auf der ursprünglichen Antwort basiert, aber mit einer grafischeren Perspektive, wobei auch der Kontext für jedes
zipfile
Setup und jede Sortierung verwendet wirdos.walk()
, um eine zu haben geordnete Ausgabe.Mit diesen Ordnern und diesen Dateien (unter anderem) wollte ich
.zip
für jedencap_
Ordner eine erstellen :Hier ist, was ich angewendet habe, mit Kommentaren zum besseren Verständnis des Prozesses.
Grundsätzlich öffne
os.walk(path)
ich für jede Iteration einen Kontext zumzipfile
Einrichten und iteriere anschließend die Iterationfiles
, bei der es sich um einelist
Datei aus demroot
Verzeichnis handelt, wobei der relative Pfad für jede Datei basierend auf dem aktuellenroot
Verzeichnis gebildet wird und an das angehängt wirdzipfile
laufenden Kontext angehängt wird .Und die Ausgabe wird folgendermaßen dargestellt:
Um den Inhalt jedes
.zip
Verzeichnisses anzuzeigen, können Sie den folgendenless
Befehl verwenden:quelle
Hier ist ein moderner Ansatz mit Pathlib und einem Kontextmanager. Fügt die Dateien direkt in die Zip-Datei und nicht in einen Unterordner ein.
quelle
Ich habe eine Funktion vorbereitet, indem ich die Lösung von Mark Byers mit den Kommentaren von Reimund und Morten Zilmer (relativer Pfad und einschließlich leerer Verzeichnisse) konsolidiert habe. Als Best Practice
with
Wird bei der Dateikonstruktion von ZipFile verwendet.Die Funktion bereitet auch einen Standardnamen für die ZIP-Datei mit dem Namen des komprimierten Verzeichnisses und der Erweiterung '.zip' vor. Daher funktioniert es nur mit einem Argument: dem zu komprimierenden Quellverzeichnis.
quelle
quelle
Nachdem ich die Vorschläge gelesen hatte, kam ich auf eine sehr ähnliche Art und Weise, die mit 2.7.x funktioniert, ohne "lustige" Verzeichnisnamen (absolut ähnliche Namen) zu erstellen, und nur den angegebenen Ordner innerhalb der Zip-Datei erstellt.
Oder nur für den Fall, dass Ihre Zip-Datei einen Ordner mit dem Inhalt des ausgewählten Verzeichnisses enthalten muss.
quelle
Funktion zum Erstellen einer Zip-Datei.
quelle
Mit zipfly
quelle