Wie entpacke ich ein Bz2 Datei mit Python?
Hallo ich möchte gern ein bz2 Datei in einem Python Script entdecken. Leider weis ich nicht wie das Funktioniert.
Beispiel Datei : Hallo.xml.bz2
Ich dachte es würde damit gehen :
Import bz2
bz2.decompress(datei)
leider erhalte ich die Fehlermeldung :
TypeError: a bytes-like object is required, not 'str'
Vielen Dank für eure Hilfe.
1 Antwort
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Was ist bei Dir datei?
Vermutlich sollte es ein datei.read() sein.
Und als Ergänzung:
https://docs.python.org/3/library/bz2.html#examples-of-usage
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Wenn es der Dateiname ist, dann willst Du:
https://docs.python.org/3/library/bz2.html#bz2.BZ2File
verwenden.
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
vielen Dank für dein Antwort. Das hab ich auch schon versucht.
- Fall :
datei = "./Hallo.xml.bz2"
#wenn ich nur den Inhalt Lesen will
with bz2.BZ2File(datei, 'r') as file:
print(file.read())
erhalte ich :
b' '
Die Datei ist eigentlich nicht leer.
2.Fall
datei = "./Hallo.xml.bz2"
with bz2.BZ2File(datei, 'x) as file:
print(file)
erhalte ich :
FileExistsError: [Errno 17] File exists: "./Hallo.xml.bz2"
Hier wird wahrscheinlich ein bz2 erstellt, statt es zu entpacken.
3.Fall:
datei = "./Hallo.xml"
with bz2.BZ2File(datei, 'x) as file:
print(file.read())
erhalte ich :
io.UnsupportedOperation: File not open for reading
Die Datei Hallo.xml wurde zwar dann erstellt, jedoch steht dann folgendes drinnen:
BZh9^WrE8P^@^@^@^@
Danke das Sie mir helfen. Die drei fälle sind zum testen. Eigentlich will ich nur das bz2 entpacken.
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Okay, gehen wir es mal durch:
>>> import bz2
>>> f=open('demo.c.bz2','rb')
>>> bz2.decompress(f.read())
b'#include <stdio.h>\n\nextern char _start;\n\nint main(void){\n\tprintf("Entrypoint: %p\\n",&_start);\n\treturn 0;\n}\n\n'
Das wäre die einfachste Variante, natürlich geht auch:
>>> import bz2
>>> with open('demo.c.bz2','rb') as f:
... bz2.decompress(f.read())
...
b'#include <stdio.h>\n\nextern char _start;\n\nint main(void){\n\tprintf("Entrypoint: %p\\n",&_start);\n\treturn 0;\n}\n\n'
Aber nehmen wir mal bz2.open:
>>> import bz2
>>> with bz2.open('demo.c.bz2','r') as f:
... print(f.read())
...
b'#include <stdio.h>\n\nextern char _start;\n\nint main(void){\n\tprintf("Entrypoint: %p\\n",&_start);\n\treturn 0;\n}\n\n'
Soweit so gut. Klappt also schonmal, schauen wir uns mal bz2file an:
>>> import bz2
>>> with bz2.BZ2File('demo.c.bz2') as bzfile:
... lines=bzfile.readlines()
... for line in lines:
... print(line.strip())
...
b'#include <stdio.h>'
b''
b'extern char _start;'
b''
b'int main(void){'
b'printf("Entrypoint: %p\\n",&_start);'
b'return 0;'
b'}'
b''
Und DU kannst kein File mit Modus X öffnen.
Du kannst ja mal Testweise eine Textdatei mit bz2 komprimieren und anschließend dekomprimieren, ob das klappt, wenn ja, dann nimmst Du mal die komprimierte und wirfst sie bz2 vor und umgekehrt.
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
Vielen Lieben Dank. Hatte tatsächlich was durcheinander gebracht. Jetzt funktioniert es Danke.
Hey, Danke für dein Antwort. Also
datei = "./Hallo.xml.bz2"
https://docs.python.org/3/library/bz2.html
hier steht, dass es das bz2 Datei sein muss, aber verstehe es irgend wie nicht ganz.