Ich habe eine TAR-Datei, die Anzahl der Dateien enthält. Ich muss ein Python-Skript schreiben, das den Inhalt der Dateien liest und die Gesamtzahl der Zeichen angibt, einschließlich der Gesamtzahl der Buchstaben, Leerzeichen, Zeilenumbrüche, alles, ohne die TAR-Datei zu entpacken.TAR-Datei Inhalt lesen, ohne entpacken, in Python-Skript
Antwort
Sie können GetMembers verwenden()
>>> import tarfile
>>> tar = tarfile.open("test.tar")
>>> tar.getmembers()
Danach können Sie extractfile() verwenden, um die Mitglieder als Dateiobjekt zu extrahieren. Nur ein Beispiel
import tarfile,os
import sys
os.chdir("/tmp/foo")
tar = tarfile.open("test.tar")
for member in tar.getmembers():
f=tar.extractfile(member)
content=f.read()
print "%s has %d newlines" %(member, content.count("\n"))
print "%s has %d spaces" % (member,content.count(" "))
print "%s has %d characters" % (member, len(content))
sys.exit()
tar.close()
Mit dem Dateiobjekt "f" in dem obigen Beispiel, können Sie lesen(), readlines() usw.
" für Mitglied in tar.getmembers() "kann zu" für Mitglied in tar "geändert werden, das entweder ein Generator oder ein Iterator ist (ich bin mir nicht sicher welche). Aber es bekommt ein Mitglied nach dem anderen. – huggie
Ich hatte gerade ein ähnliches Problem, aber das Tarfile-Modul scheint meinen RAM zu essen, obwohl ich die "r |" -Option verwendet habe. – devsnd
Ah. Ich habe es gelöst. Vorausgesetzt, Sie würden den Code schreiben, wie von Huggie angedeutet, müssen Sie die Liste der Mitglieder hin und wieder "säubern". In dem obigen Codebeispiel wäre das also "tar.members = []". Mehr Infos hier: http://bit.ly/JKXrg6 – devsnd
Sie müssen das Tarfile-Modul verwenden. Insbesondere Sie eine Instanz der Klasse tarfile verwenden, um die Datei zuzugreifen, und dann Zugriff auf die Namen mit TarFile.getnames()
| getnames(self)
| Return the members of the archive as a list of their names. It has
| the same order as the list returned by getmembers().
Wenn Sie stattdessen den Inhalt lesen möchten, dann verwenden Sie diese Methode
| extractfile(self, member)
| Extract a member from the archive as a file object. `member' may be
| a filename or a TarInfo object. If `member' is a regular file, a
| file-like object is returned. If `member' is a link, a file-like
| object is constructed from the link's target. If `member' is none of
| the above, None is returned.
| The file-like object is read-only and provides the following
| methods: read(), readline(), readlines(), seek() and tell()
Hinweis: Sie können dann auf den Member über einen Index zugreifen, der wie folgt aufgebaut ist: 'myFile = myArchive.extractfile (dict (zip (myArchive.getnames(), myArchive.getmembers())) [' Pfad/zu/Datei ']). read() ' – ThorSummoner
Eine Implementierung der von @ stefano-Borini genannten Verfahren Greifen Sie auf ein tar-Archive Mitglied über Dateinamen wie so
#python3
myFile = myArchive.extractfile(
dict(zip(
myArchive.getnames(),
myArchive.getmembers()
))['path/to/file']
).read()`
Credits:
dict(zip(
von https://stackoverflow.com/a/209854/1695680tarfile.getnames
von https://stackoverflow.com/a/2018523/1695680- Zusätzlich für meine Anwendungen, aus dem Puffer tar-Archiv Lesen How to construct a TarFile object in memory from byte buffer in Python 3?
- 1. lesen Zip-Datei Inhalt ohne in Java zu extrahieren
- 2. Entpacken NSData ohne temporäre Datei
- 3. Lesen von verschiedenen Dateien ohne alten Inhalt perl
- 4. Excel-Datei lesen, ohne den Inhalt zu ändern
- 5. Inhalt lesen von SyndicationContent
- 6. Inhalt in Zip-Datei
- 7. Android lesen Inhalt einer URL (Inhalt nach in Folge fehlt)
- 8. Webview Inhalt lesen und umleiten
- 9. Adb lesen Inhalt eines Alarmdialogs
- 10. Winkelmesser: Lesen Inhalt der Tabelle
- 11. Entpacken von Dateien in Python
- 12. Federausdruck Inhalt der Datei lesen
- 13. lesen url Inhalt, ungepufferte php
- 14. Lesen interner Flash-Speicher Inhalt
- 15. Lesen von Iframe-Inhalt in Iframe Laden
- 16. Inhalt einer URL in Android lesen
- 17. Lesen Zelle Inhalt in einem Ipython-Notebook
- 18. HTML-Inhalt einer URL in OCaml lesen
- 19. Lesen von dynamischen Webseiten Inhalt in Java
- 20. Gesamten Inhalt einer Webseite in Java lesen
- 21. Den Inhalt einer Datei in sharpsvn lesen
- 22. Datei Inhalt wird nicht in Struktur lesen
- 23. Wie EPUB-Datei Inhalt nach dem Entpacken analysieren
- 24. Entpacken ZIP-Datei und extrahieren unbekannt Ordnername Inhalt
- 25. WebClient Inhalt der Fehlerseite lesen
- 26. Wie entpacken Sie io.ReadCloser?
- 27. Maven - Abhängige Bibliotheken in jar einschließen, ohne Abhängigkeiten zu entpacken?
- 28. Binärdaten lesen ohne reinterpret_cast
- 29. entpacken Quellcode in Iphone
- 30. Tupeltypen in Scala entpacken
Wie können Sie die Zeichen/Buchstaben/Leerzeichen/Everthing zählen, ohne diejenigen, woanders zu extrahieren? – YOU
das ist genau die Frage gestellt. –