shutil.unpack_archive tut nichts

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.
Antworten
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Bin gerade dabei ein Programm zu schreiben was Ordner zuerst packt und dann verschlüsselt. Natürlich soll dies auch anders herum gehen, also zu erst entschlüsseln und dann entpacken.
Das packen und verschlüsseln klappt super. Auch das entschlüsseln klappt, allerdings entpackt er den Ordner nicht wieder. Dachte das liegt an dem Code drum herum, darum hab ich mal nur die Zeile Code ausgelagert die für das entpacken wichtig ist, aber es passiert immer noch nichts. Es kommt auch keine Fehlermeldung.


Mein Code:

Code: Alles auswählen

import shutil

folder_to_unpack = input("Welcher Ordner soll entpackt werden?: ")
shutil.unpack_archive(folder_to_unpack, 'zip')
Benutzeravatar
__blackjack__
User
Beiträge: 14045
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jankie: Also erst einmal ist die Formulierung welcher ”Ordner” entpackt werden soll komisch. Und dann ist die Frage warum Du das Zielverzeichnis 'zip' nennst, und ist da tatsächlich danach kein Verzeichnis mit dem Namen 'zip' und dem Inhalt des Archivs?
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Also damit wollte ich eigentlich das format angeben, aber hab anscheinend die Parameterreihenfolge vertauscht. Allerdings sollte das ja nur ein optionaler Parameter sein und ohne den müsste es klappen und ins Verzeichnis kopieren indem die Python Datei liegt? Also mit:

Code: Alles auswählen

folder_to_unpack = input("Welcher Ordner soll entpackt werden?: ")
shutil.unpack_archive(folder_to_unpack)

tut sich auch nichts.
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

@Jankie: es wird halt nicht in das Verzeichnis entpackt, wo die Python-Datei liegt, sondern ins aktuelle Arbeitsverzeichnis.
Hast Du da schon nachgeschaut?
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Dort finde ich auch nichts. Auch wenn ich den Pfad wohin es entpackt werden soll explizit angebe tut sich nichts.

Code: Alles auswählen

import shutil

extract_dir = r"C:\Users\xxx\Desktop"
folder_to_unpack = input("Welcher Ordner soll entpackt werden?: ")
shutil.unpack_archive(folder_to_unpack, extract_dir)
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Okay, habe den Fehler gefunden.

Ich habe einfach einen leeren Ordner gepackt und dann wieder entpackt. Beim entpacken werden aber direkt die Dateien im Ordner entpackt, nicht der Ordner an sich. Hat jemand eine Lösung wie ich nur den Ordner entpacken kann?


Also wenn ich einen Ordner habe Namens "Neuer Ordner" und mit einer Datei "Neues Textdokument.txt" und den dann mit shutil packe, wird "Neuer Ordner.zip" drauß und die Datei "Neues Textdokument.txt" liegt drin, beim entpacken möchte ich dann wieder nur "Neuer Ordner", nicht direkt "Neues Textdokument.txt" haben.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Dann schau dir beim Packen mal die Argumente "root_dir" und "base_dir" an.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Habs mir mal angeguckt aber so wirklich verstehen tue ich es leider nicht.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Du musst halt sichergehen, dass "Neuer Ordner" mit gepackt wird. Wenn dein base_dir Neuer Ordner ist, ist das ja deine Basis. Alles was _darin_ ist, wird gepackt, der Ordner selbst aber nicht.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Ahhhh danke, habe es jetzt hinbekommen mit

Code: Alles auswählen

shutil.make_archive(filename, 'zip', ".", filename)


#edit: Habe hier mal den kompletten Code gepostet, würde mich über Verbesserungsvorschläge freuen!
Antworten