Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Moin
Hab ein eigentlich ziemlich dämliches Problem und zwar versuche ich einfach nur ein Zip Archiv zu erstellen(klappt auch super), aber eine txt Datei darin zu speichern führt dazu, dass das Zip Archiv "ungültig" wird und nicht mehr geöffnet werden kann. Den compress type zipfile.ZIP_DEFLATED anzugeben bringt auch nix das hab ich in allen Varianten probiert.
Danke für jede Antwort!
Hier der Code:
Nur weil einer Datei die Endung .zip hat, ist das noch lange keine Zipdatei.
Rekursion ist kein Ersatz für eine Schleife. main darf nicht mehrmals aufgerufen werden, sondern in main brauchst du eine Schleife.
Die Schleife in create_Safe ist reichlich kompliziert. Du hast eine while-True-Schleife und eine zusätzliche Abbruchvariable kompliziert miteinander kombiniert. Statt dessen brauchst du eigentlich eine for-Schleife mit itertools.count.
close ist bei einem with-Block unnötig. Den Dateinamen solltest du nur einmal zusammenbauen und dann auch nur Formatstring statt +.
import zipfile
from pathlib import Path
from itertools import count
SAFES_PATH = Path("Safes")
def create_safe():
for i in count(1):
filename = SAFES_PATH / f"Safe{i}.zip"
if not filename.is_file():
break
print(f"Wählen sie ein Passwort für Safe[{i}]")
password = input(">>")
with zipfile.ZipFile(filename, "w") as zip_file:
zip_file.writestr("README.txt", f"Password: {password}\n")
def open_safe():
pass
def main():
with True:
print("==========Safe==========")
print("[1]Create a Safe")
print("[2]Open a Safe")
print("===========================")
choice = input(">>")
if choice == "1":
create_safe()
elif choice == "2":
open_safe()
if __name__ == "__main__":
main()
Komisch ist noch, dass Du Dateien in einem Verzeichnis relativ zum aktuellen Arbeitsverzeichnis anlegest, und dann niemandem verrätst wie die Datei wirklich heißt.