Hallo,
bin ganz neu in Python und habe folgendes Problem:
ich habe eine Wörterbuch Datei. Darin sind immer 31 Bytes ein Eintrag, wobei wenn das Wort nicht die 31 Bytes lang ist, die restlichen Bytes mit dem Wert 00hex aufgefüllt sind.
1. Wie lese ich jetzt diese Wörter in eine Liste ein?
mit file.read(31) ?
2. Wie erkenn ich das Dateiende?
3. Wie schneide ich die überflüssigen 00hex am Ende ab?
4. Wie findet man denn in der Doku überhaupt passende Funktionen, für das was man sucht??
Vielen Dank für eure Mühen =)
Datei binär / String / Hilfe
Damit liest Du einen Eintrag ein. Also musst Du das in einer Schleife machen.jihi hat geschrieben:ich habe eine Wörterbuch Datei. Darin sind immer 31 Bytes ein Eintrag, wobei wenn das Wort nicht die 31 Bytes lang ist, die restlichen Bytes mit dem Wert 00hex aufgefüllt sind.
1. Wie lese ich jetzt diese Wörter in eine Liste ein?
mit file.read(31) ?
Wenn die Datei zuende ist, dann liefert `read()` eine leere Zeichenkette.2. Wie erkenn ich das Dateiende?
`rstrip()` Methode auf Zeichenketten.3. Wie schneide ich die überflüssigen 00hex am Ende ab?
Kommt drauf an was man sucht.4. Wie findet man denn in der Doku überhaupt passende Funktionen, für das was man sucht??
In Deinem Fall ist's die Doku zu `file` bzw. `open` und Zeichenketten.
Ungetestet:
Code: Alles auswählen
def read_words(fileobj):
result = list()
while True:
word = fileobj.read(31)
if not word:
break
result.append(word.rstrip('\x00'))
return result
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Schau mal in die FAQ http://www.pythonwiki.de/PythonDeForum/Faq den Punkt "Wo finde ich Informationen zum Python-Befehl XY?"jihi hat geschrieben:4. Wie findet man denn in der Doku überhaupt passende Funktionen, für das was man sucht??
Ahh, Danke Danke
werds gleich mal testen =)
Mein Problem ist ja, dass ich garnet weiss wie der passende Befehl heisst.
werds gleich mal testen =)
Mein Problem ist ja, dass ich garnet weiss wie der passende Befehl heisst.
ich wollt die Datei jetzt so umspeichern, das die Einträge nicht eine konstante Länge, sonder ein Byte die Länge angibt, und dann der Eintrag kommt.
°aber wie schreibe und lese ich in Python einzelne Bytes?
°muss ich die immer erst in einen String umwandeln, das ich die mit write schreiben kann?
°binascii Lib, bin ich da richtig?
°wie bring ich denn noch print dazu äüö auch als solche und nicht als '\\x05' auszugeben?
danke
...ihr seid Spitze!
°aber wie schreibe und lese ich in Python einzelne Bytes?
°muss ich die immer erst in einen String umwandeln, das ich die mit write schreiben kann?
°binascii Lib, bin ich da richtig?
°wie bring ich denn noch print dazu äüö auch als solche und nicht als '\\x05' auszugeben?
danke
...ihr seid Spitze!
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Ich glaube struct.pack() ist besser:jihi hat geschrieben:°binascii Lib, bin ich da richtig?
http://www.python.org/doc/current/lib/m ... truct.html
Aber da find ich nur Integer, keine einzelnen Bytes
ja, und in der Tabelle gibts nur Int, dieses Byte ganz oben, das versteh ich nicht, weil da pack nur 1 Argument nimmt??
Man kann das auch mit dem `struct` Modul lösen, aber wenn es sich nur um ein einzelnes Byte, also ein Zeichen in einer Zeichenkette handelt, dann reichen die Funktionen `chr()` und `ord()` um zwischen Zahl und Zeichen hin und her zu wandeln.
Aber ist es wirklich nötig die Daten von einem Binärformat in ein anderes umzuwandeln wenn es sich um Textdaten handelt? Wieso nicht einfach ein Eintrag pro Zeile in einer ganz normalen Textdatei?
Zur Ausgabe von Sonderzeichen: Wenn Du irgendwas mit \xa6 oder so siehst, dann hast Du höchstwahrscheinlich nicht die Zeichenkette ausgegeben sondern die `repr()` Form davon. Alles ausserhalb von ASCII kann etwas komplizierter werden, weil sich alle beteiligten (Eingabedatei, Python-Interpreter, Shell, Terminalprogramm) über die Kodierung der Daten einig sein müssen.
Aber ist es wirklich nötig die Daten von einem Binärformat in ein anderes umzuwandeln wenn es sich um Textdaten handelt? Wieso nicht einfach ein Eintrag pro Zeile in einer ganz normalen Textdatei?
Zur Ausgabe von Sonderzeichen: Wenn Du irgendwas mit \xa6 oder so siehst, dann hast Du höchstwahrscheinlich nicht die Zeichenkette ausgegeben sondern die `repr()` Form davon. Alles ausserhalb von ASCII kann etwas komplizierter werden, weil sich alle beteiligten (Eingabedatei, Python-Interpreter, Shell, Terminalprogramm) über die Kodierung der Daten einig sein müssen.