Seite 1 von 1

zipfile: Datei ohne Verzeichnisstruktur entpacken

Verfasst: Dienstag 11. Oktober 2016, 13:07
von Grendel
Hallo,

gibt es eine elegante Möglichkeit, mittels zipfile eine Datei ohne ihre übergeordnete Verzeichnisstruktur zu entpacken? Nutze ich z.B.

Code: Alles auswählen

zip_members.extract(member)
um nur auf eine komprimierte Datei zuzugreifen, so wird immer das übergeordnete Verzeichnis mit dekomprimiert. Klar, ich könnte die Datei(en) in ein temporäres Verzeichnis entpacken und anschließend nur die Dateien ins Zielverzeichnis kopieren. Das aber erscheint mir nicht sehr elegant.

Re: zipfile: Datei ohne Verzeichnisstruktur entpacken

Verfasst: Dienstag 11. Oktober 2016, 13:21
von Sirius3
@Grendel: indem man einfach zip_members.open mit shutil.copyfileobj nutzt.

Re: zipfile: Datei ohne Verzeichnisstruktur entpacken

Verfasst: Dienstag 11. Oktober 2016, 21:20
von Grendel
Okay, danke. Was genau ist der Unterschied zwischen zip_members.extract und zip_members.open?

Re: zipfile: Datei ohne Verzeichnisstruktur entpacken

Verfasst: Dienstag 11. Oktober 2016, 21:37
von Sirius3
@Grendel: das steht in der Dokumentation.

Re: zipfile: Datei ohne Verzeichnisstruktur entpacken

Verfasst: Dienstag 11. Oktober 2016, 22:04
von BlackJack

Code: Alles auswählen

In [17]: import difflib

In [18]: list(difflib.ndiff('zip_members.extract', 'zip_members.open'))
Out[18]: 
['  z',
 '  i',
 '  p',
 '  _',
 '  m',
 '  e',
 '  m',
 '  b',
 '  e',
 '  r',
 '  s',
 '  .',
 '+ o',
 '+ p',
 '  e',
 '+ n',
 '- x',
 '- t',
 '- r',
 '- a',
 '- c',
 '- t']
SCNR :-)

Re: zipfile: Datei ohne Verzeichnisstruktur entpacken

Verfasst: Mittwoch 12. Oktober 2016, 10:45
von Grendel
Sirius3 hat geschrieben:@Grendel: das steht in der Dokumentation.
Auf die Idee, in die Doku zu schauen, bin ich ja nun auch schon gekommen. Das hilft nun nicht wirklich, da die Doku, wie eigentlich alle Dokumentationen aller Programmiersprachen, die Kenntnis gewisser, oft sogar sprachenspezifischer, Fachtermini voraussetzt, die man als Neuling nicht unbedingt hat. Ich zitiere mal:

ZipFile.extract(member, path=None, pwd=None)
Extract a member from the archive to the current working directory ...

ZipFile.open(name, mode='r', pwd=None)
Extract a member from the archive as a file-like object (ZipExtFile)

So so, ein file-like object also. Was ist das? Omas Zettelkasten ist auch ein "file-like object", wird aber wohl kaum gemeint sein.

Re: zipfile: Datei ohne Verzeichnisstruktur entpacken

Verfasst: Mittwoch 12. Oktober 2016, 11:56
von BlackJack
@Grendel: „file-like objekt“ heisst auf Deutsch `file`-ähnliches Objekt. Ebenfalls bei der `open()`-Methode steht der Satz: „The file-like object is read-only and provides the following methods: read(), readline(), readlines(), __iter__(), next().“ Also Methoden die einem allgemein von Dateien in Python bekannt sein sollten. Bietet Oma's Zettelkasten diese Methoden auch? Dann wäre er auch ein „file-like“. Duck typing halt. :-)

Das Du die Dokumentation schon gelesen hast, kann ja keiner Wissen wenn Du das nicht sagst. Darum kommt bei Fragen die von der Dokumentation beantwortet werden, ein Verweis auf eben jene. Wenn Du Die nicht verstehst, dann stell konkrete Fragen was Du daran nicht verstehst. Wenn Du das nicht tust, wissen wir nicht wo das Problem liegt und können es ohne Glaskugel auch nicht angehen.