Dateiliste der in einer Zip-Datei enthaltenen Dateien abrufen


72

Ich habe ein Zip-Archiv : my_zip.zip. Darin befindet sich eine txt-Datei, deren Namen ich nicht kenne. Ich habe mir Pythons zipfileModul ( http://docs.python.org/library/zipfile.html ) angesehen, konnte aber nicht allzu viel Sinn daraus machen, was ich versuche.

Wie würde ich das Äquivalent eines Doppelklickens auf die Zip-Datei tun, um die TXT-Datei zu erhalten, und dann die TXT-Datei verwenden, damit ich Folgendes tun kann:

>>> f = open('my_txt_file.txt','r')
>>> contents = f.read()

Antworten:


101

Was Sie brauchen, ist ZipFile.namelist(), dass Sie eine Liste aller Inhalte des Archivs erhalten. Anschließend können Sie eine zip.open('filename_you_discover')ausführen, um den Inhalt dieser Datei abzurufen.


4
Oder verwenden infolist()Sie, wenn Sie andere Details erhalten möchten. wie das Datum geändert oder komprimiert Größe
Die rote Erbse

8
Gibt es eine Methode, die die Dateinamen als Iterator und nicht als Liste zurückgibt?
Elliott

gist.github.com/berezovskyi/c440125e10fc013a36f6f5feb8bc3117 ist ein kurzer Hack, den ich für mich selbst geschrieben habe, um einen Generator alsfor f in itertar(tarfile):
berezovskyi

20
import zipfile

zip=zipfile.ZipFile('my_zip.zip')
f=zip.open('my_txt_file.txt')
contents=f.read()
f.close()

Die Dokumentation finden Sie hier . Die namelist()Methode gibt Ihnen insbesondere die Namen der Mitglieder der Zip-Datei.


2
Ich erhalte die Fehlermeldung "Es gibt kein Element mit dem Namen '<Dateiname>' im Archiv". Beachten Sie, dass ich nicht weiß, wie der Name der komprimierten Datei heißt (und er sich vom Namen des Zip-Archivs unterscheidet).
David542

19
import zipfile

zip = zipfile.ZipFile('filename.zip')

# available files in the container
print (zip.namelist())


# extract a specific file from zip 
f = zip.open("file_inside_zip.txt")
content = f.read()
# save the extraced file 
f = open('file_inside_zip.extracted.txt', 'wb')
f.write(content)
f.close()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.