Wie liest man Bytes aus Datei in Python

8

Ähnlich wie diese Frage versuche ich es lese einen ID3v2-Tag-Header ein und habe Probleme herauszufinden, wie man einzelne Bytes in Python bekommt.

Ich lese zuerst alle zehn Bytes in eine Zeichenfolge. Ich möchte dann die einzelnen Informationen analysieren.

Ich kann die zwei Versionsnummer-Zeichen in der Zeichenfolge abrufen, aber dann habe ich keine Ahnung, wie ich diese zwei Zeichen nehmen und eine Ganzzahl daraus erhalten soll.

Das Strukturpaket scheint zu sein, was ich will, aber ich kann es nicht zum Laufen bringen.

Hier ist mein Code so weit (Ich bin sehr neu zu Python BTW ... also nimm es leicht auf mich):

%Vor%

Es ist offensichtlich ein Mist, irgendeinen Wert auszudrucken, weil sie nicht korrekt formatiert sind.

    
jjnguy 29.09.2008, 20:37
quelle

4 Antworten

16

Wenn Sie eine Zeichenfolge mit 2 Byte haben, die Sie als 16-Bit-Ganzzahl interpretieren möchten, können Sie dies tun:

%Vor%

Beachten Sie, dass das & gt; ist für Big-Endian (der größte Teil der Ganzzahl kommt zuerst). Dies ist das Format, das ID3-Tags verwenden.

Für andere Integer-Größen verwenden Sie unterschiedliche Formatcodes. z.B. "i" für eine 32-Bit-Ganzzahl mit Vorzeichen. Details finden Sie in der Hilfe (struct).

Sie können auch mehrere Elemente gleichzeitig entpacken. zB für 2 unsigned shorts, gefolgt von einem vorzeichenbehafteten 32 bit Wert:

%Vor%

Nach Ihrem Code suchen Sie (in Reihenfolge):

  • eine 3-Zeichenkette
  • 2 einzelne Byte-Werte (Haupt- und Nebenversion)
  • eine 1-Byte-Flags-Variable
  • eine 32-Bit-Länge Menge

Die Formatzeichenfolge dafür wäre:

%Vor%     
Brian 29.09.2008, 20:50
quelle
4

Warum schreibst du dein eigenes? (Angenommen, Sie haben diese anderen Optionen noch nicht überprüft.) Es gibt ein paar Möglichkeiten, ID3-Tag-Informationen aus MP3s in Python zu lesen. Sehen Sie sich meine Antwort über diese Frage.

    
Owen 29.09.2008 20:50
quelle
2
  

Ich versuche, einen ID3v2-Tag-Header einzulesen

FWIW, dafür gibt es bereits ein Modul .

    
Alex Coventry 29.09.2008 21:00
quelle
2

Ich würde das struct -Paket empfehlen, aber dann hast du gesagt, du hättest es versucht. Versuchen Sie Folgendes:

%Vor%

Die Funktion pack() konvertiert Python-Datentypen in Bits und die Funktion unpack() konvertiert Bits in Python-Datentypen.

    
Greg Hewgill 29.09.2008 20:40
quelle

Tags und Links