Wie entpacke ich ein Bz2 Datei mit Python?

1 Antwort

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


Nijme 
Beitragsersteller
 16.07.2020, 13:23

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.

0
Nijme 
Beitragsersteller
 16.07.2020, 14:12
@KarlRanseierIII

vielen Dank für dein Antwort. Das hab ich auch schon versucht.

  1. 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.

0
KarlRanseierIII  16.07.2020, 14:51
@Nijme

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.

0
Nijme 
Beitragsersteller
 17.07.2020, 06:31
@KarlRanseierIII

Vielen Lieben Dank. Hatte tatsächlich was durcheinander gebracht. Jetzt funktioniert es Danke.

0