Frage zu Dateien, Bits und Bytes

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
qweet
User
Beiträge: 119
Registriert: Freitag 2. September 2005, 21:26

Samstag 17. September 2005, 17:29

Hallo,

ich habe eine 1mb große Datei und würde diese gern byte-weise auslesen.
wie stell ich das an?

Code: Alles auswählen

datei = open('1meg.001', 'r')
datei.read()
gibt bei mir sowas in der Art aus:
'"\xb24\xb8\xdc\...\...\'

Jetzt noch eine letzte Frage zu den Bits. Wie kann ich aus einem Byte die einzelnen Bits auslesen?

das wars auch schon :roll: ;)
mfg, qweet
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 17. September 2005, 17:51

datei.read(1) ist sehr naheliegend und sollte funktionieren.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Samstag 17. September 2005, 18:26

Hi

Also falls es Windows ist vielleicht 'rb' anstatt 'r' nehmen (Binär lesen).

Wegen Bitweise lesen:
http://www.python-forum.de/viewtopic.ph ... highlight=

Gruss Rayo
BlackJack

Samstag 17. September 2005, 21:05

qweet hat geschrieben:ich habe eine 1mb große Datei und würde diese gern byte-weise auslesen.
wie stell ich das an?

Code: Alles auswählen

datei = open('1meg.001', 'r')
datei.read()
gibt bei mir sowas in der Art aus:
'"\xb24\xb8\xdc\...\...\'
Damit bekommst Du eine Zeichenkette mit dem gesamten Inhalt der Datei. Mit '\x??' werden Bytes angezeigt, die sich nicht als ASCII anzeigen lassen. Anstelle der beiden Fragezeichen steht eine zweistellige Hexadezimalzahl, die den Wert des Bytes angibt.

Bei Dateien mit nur einem Megabyte kannst Du normalerweise unbesorgt die ganze Datei in den Speicher laden und dann über die einzelnen Zeichen iterieren. Dateien byteweise einlesen ist recht langsam.

Wenn Du die Zeichen als Zahl, also den Byte-Wert benötigst, dann musst Du die Zeichen mit der `ord()` Funktion umwandeln:

Code: Alles auswählen

from itertools import imap

datei = open('1meg.001', 'rb')
data = datei.read()
datei.close()

for byte in imap(ord, data):
    print byte
Antworten