Skript zur Reduktion der Dateigrösse durch Entfernung der enthaltenden .stl Dateien.

This commit is contained in:
2025-12-19 19:40:37 +01:00
parent 4964f212d2
commit 84676b8a06
+91
View File
@@ -0,0 +1,91 @@
#!/usr/bin/env python3
"""
Filtert ein ZIP-Archiv und entfernt alle .stl Dateien.
Ausgabe: originalname_heute.zip (oder ersetzt Original mit --replace)
"""
import zipfile
import sys
import argparse
import shutil
from pathlib import Path
def filter_zip_no_stl(source_zip_path: str, replace: bool = False) -> str:
"""
Öffnet ein ZIP und erstellt ein neues ohne .stl Dateien.
Args:
source_zip_path: Pfad zur Quell-ZIP-Datei
replace: Wenn True, wird das Original ersetzt
Returns:
Pfad zur erstellten/ersetzten ZIP-Datei
"""
source_path = Path(source_zip_path)
if not source_path.exists():
raise FileNotFoundError(f"Datei nicht gefunden: {source_zip_path}")
if not source_path.suffix.lower() == '.zip':
raise ValueError(f"Keine ZIP-Datei: {source_zip_path}")
# Temporäres Ziel-ZIP
temp_path = source_path.with_name(f"{source_path.stem}_heute.zip")
copied_count = 0
skipped_count = 0
with zipfile.ZipFile(source_path, 'r') as src_zip:
with zipfile.ZipFile(temp_path, 'w', zipfile.ZIP_DEFLATED) as dst_zip:
for info in src_zip.infolist():
# Verzeichnisse überspringen
if info.is_dir():
continue
# .stl Dateien ausschließen (case-insensitive)
if Path(info.filename).suffix.lower() == '.stl':
skipped_count += 1
print(f"{info.filename}")
else:
# Datei mit Original-Metadaten kopieren
data = src_zip.read(info.filename)
dst_zip.writestr(info, data)
copied_count += 1
print(f"\nErgebnis: {copied_count} Datei(en) kopiert, {skipped_count} STL-Datei(en) entfernt")
if replace:
shutil.move(str(temp_path), str(source_path))
print(f"Original ersetzt: {source_path}")
return str(source_path)
else:
print(f"Ziel-ZIP: {temp_path}")
return str(temp_path)
def main():
parser = argparse.ArgumentParser(
description="Filtert ZIP-Archive und entfernt alle .stl Dateien."
)
parser.add_argument(
"zipfile",
help="Pfad zur Quell-ZIP-Datei"
)
parser.add_argument(
"--replace",
action="store_true",
help="Original-ZIP durch gefilterte Version ersetzen"
)
args = parser.parse_args()
try:
filter_zip_no_stl(args.zipfile, args.replace)
except (FileNotFoundError, ValueError, zipfile.BadZipFile) as e:
print(f"Fehler: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()