Ich habe eine Liste von Bytes als Ganzzahlen, was so etwas wie ist
[120, 3, 255, 0, 100]
Wie kann ich diese Liste als Binärdatei in eine Datei schreiben?
Würde das funktionieren?
newFileBytes = [123, 3, 255, 0, 100]
# make file
newFile = open("filename.txt", "wb")
# write to file
newFile.write(newFileBytes)
TypeError: argument 1 must be string or buffer, not list
.Antworten:
Genau dafür
bytearray
ist gedacht:Wenn Sie Python 3.x verwenden, können Sie
bytes
stattdessen verwenden (und sollten dies wahrscheinlich tun, da dies Ihre Absicht besser signalisiert). Aber in Python 2.x funktioniert das nicht, weilbytes
es nur ein Alias für iststr
. Wie üblich ist das Zeigen mit dem interaktiven Interpreter einfacher als das Erklären mit Text. Lassen Sie mich das einfach tun.Python 3.x:
Python 2.x:
quelle
str.encode
undstruct.pack
wenn Sie an 2.2 arbeiten müssen. Aber 2.6 ist seit 5 Jahren nicht mehr erhältlich. Alle drei noch unterstützten Ubuntu-LTSs, alle drei unterstützten OS X-Versionen, die vorherige Hauptversion von CentOS / RHEL usw. sind bereits integriert. Wenn Sie 2.5 oder 2.1 oder 1.6 oder was auch immer unterstützen müssen, sind Sie wahrscheinlich weiß ...bytearray
noch Konvertiten\n
zu\r\n
, es unbefriedigend für binäre Daten zu machen, wenn die „b“ Flag nicht bestanden, wenn die Datei geöffnet wird .\r\n
Funktion ist Teil der universellen Zeilenumbruchoptionen für Text.)Verwenden Sie
struct.pack
diese Option , um die Ganzzahlwerte in Binärbytes zu konvertieren, und schreiben Sie dann die Bytes. Z.BAllerdings würde ich niemals eine Binärdatei a geben
.txt
Erweiterung geben.Der Vorteil dieser Methode besteht darin, dass sie auch für andere Typen funktioniert. Wenn beispielsweise einer der Werte größer als 255 ist, können Sie
'5i'
stattdessen das Format verwenden, um vollständige 32-Bit-Ganzzahlen zu erhalten.quelle
Verwenden Sie die
chr
Funktion, um von Ganzzahlen <256 in Binärzahlen zu konvertieren . Sie möchten also Folgendes tun.quelle
charmap
eher als seinascii
und funktioniert sowohl in Python2 als auch in Python3. Dieascii
Codierung funktioniert nur in Python2.Ab Python 3.2+ können Sie dies auch mit der
to_bytes
nativen int-Methode erreichen:Das heißt, jeder einzelne Aufruf von
to_bytes
in diesem Fall erzeugt eine Zeichenfolge der Länge 1, deren Zeichen in Big-Endian-Reihenfolge angeordnet sind (was für Zeichenfolgen der Länge 1 trivial ist), die den ganzzahligen Wert darstelltbyte
. Sie können auch die letzten beiden Zeilen zu einer einzigen verkürzen:quelle
Sie können das folgende Codebeispiel mit der Python 3-Syntax verwenden:
Hier ist Shell Einzeiler:
quelle
Verwenden Sie Gurke wie folgt: Importgurke
Ihr Code würde folgendermaßen aussehen:
Verwenden Sie die Methode pickle.load, um die Daten zurückzulesen
quelle