ich habe folgendes Problem, bei dem ich die Lösung noch nicht gefunden habe. Der Inhalt eines "Source-Ordner" soll in eine oder mehrere voneinander unabhängige ZIP-Dateien gepackt und im "Target-Ordner" gespeichert werden. Im Netz hatte ich ein Python-Skript gefunden, dass ich mit meinen begrenzten Fähigkeiten bezüglich "zipfilesname" angepasst. Das Problem ist, dass die Struktur in der erstellten ZIP-Datei so nicht gewünscht ist. Im Beispiel ist die Ordnerebene "Source" in der per Python-Skript erstellten ZIP-Datei nicht erwünscht.
Fallbeispiel:
- Ordnerstruktur des Source-Ordners "D:\Test\Source":
- D:\Test\Source\Ordner A\Test 1.txt
- D:\Test\Source\Ordner A\Test 2.txt
- D:\Test\Source\Ordner A\Test 3.txt
- D:\Test\Source\Ordner B\Test 1.txt
- D:\Test\Source\Ordner B\Test 2.txt
- D:\Test\Source\Ordner B\Test 3.txt
- Ordnerstruktur des Target-Ordners "D:\Test\Target":
- D:\Test\Target\ZipFileName Teil 1.zip
- Struktur in der ZIP-Datei "D:\Test\Target\ZipFileName Teil 1.zip":
- Source\Ordner A\Test 1.txt
- Source\Ordner A\Test 2.txt
- Source\Ordner A\Test 3.txt
- Source\Ordner B\Test 1.txt
- Source\Ordner B\Test 2.txt
- Source\Ordner B\Test 3.txt
- gewünschte Struktur in der ZIP-Datei "D:\Test\Target\Wunsch ZipFileName Teil 1.zip":
- Ordner A\Test 1.txt
- Ordner A\Test 2.txt
- Ordner A\Test 3.txt
- Ordner B\Test 1.txt
- Ordner B\Test 2.txt
- Ordner B\Test 3.txt
Code: Alles auswählen
import os
import zipfile
path = "D:\Test\Source"
storage_folder = 'D:\Test\Target'
filesize = 10
zipfilesname = "ZipFileName"
def zip_folder(storage_folder,path, max_filesize=100):
files_written = 1 # file counter
zip_name = f"{storage_folder}\{zipfilesname}{files_written}.zip"
zipWriter = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
zip_names = [f"{files_written}.zip"]
for root, dirs, files in os.walk(path):
for file in files:
zipWriter.write(os.path.join(root, file),
os.path.relpath(os.path.join(root, file),
os.path.join(path, '..')))
# current zip size
current_size = os.path.getsize(zip_name) >> 20
if current_size > max_filesize:
zipWriter.close()
files_written += 1
zip_name = f"{storage_folder}\{zipfilesname}{files_written}.zip"
zip_names.append(zip_name)
zipWriter = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
zipWriter.close()
return zip_names
zip_folder(storage_folder,path,filesize)
- Kann jemand den Grund für das beschriebene Problem im Python-Skript sehen und beheben?
- Wie könnte ich mir die gefundenen Dateien und deren Pfade in der Schleife ausgeben lassen? Um das Problem zu identifizieren.