Verständnisfrage lstrip, rstrip bzw, strip

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
bowie_22
User
Beiträge: 7
Registriert: Mittwoch 28. Oktober 2009, 07:14

Hallo Zusammen,

ich stehe auf dem Schlauch ...
Habe folgendes Problem:

Ich lese aus einem Binärfile 32 Byte aus.
In diesen 32 Byte soll ein Name einer Größe gespeichert sein.

Code: Alles auswählen

self.short_signal_name=self.pretty(mdfstream.read(32*CHAR))
in pretty mache ich ein lstrip, rstrip um vermeintlich all Spaces loszuwerden.

Beispiel: Stand an den ersten 4 Byte in dem Stream 'oma' wird der Inhalt von self.short_signal_name in meiner Entwicklungsumgebung wie folgt angezeigt:

oma

Also in dem Fall habe ich gehofft nach dem Strip Befehl einen String der Länge 4 zu haben, da augenscheinlich in den letzten 28Byte ein Leerzeichen steht.


Schaue ich mir len(self.short_signal_name) an wird mir mitgeteilt, dass

Code: Alles auswählen

self.short_signal_name
32 (32 Byte eben) lang ist.
Wie bekomme ich die Leerzeichen weg?
Wo ist mein Denkfehler?

Kann mir jemand helfen?

Danke!
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Hallo,

scheinbar macht deine 'pretty'-Methode nicht das was du denkst. Lass dir doch mal die "string representation" deines Strings 'repr(...)' ausgeben. Ansonsten musst du uns mal die 'pretty'-Methode zeigen.

Wild geraten wäre jetzt, dass du 'str.strip' falsch verwendest und nicht beachtest das Zeichenketten in Python unveränderbar sind:

Code: Alles auswählen

In [11]: s = 'oma           '

In [12]: s.strip()
Out[12]: 'oma'

In [13]: print repr(s)
'oma           '

In [14]: s = s.strip()

In [15]: print repr(s)
'oma'
Grüße
Gerrit
BlackJack

@bowie_22: Die Füllbytes könnten zum Beispiel Nullbytes sein. Das wäre nicht ungewöhnlich und Nullbytes führen bei den meisten Anzeigen auch zu keiner Ausgabe.
bowie_22
User
Beiträge: 7
Registriert: Mittwoch 28. Oktober 2009, 07:14

Hallo

erstmal danke für die Hinweise.
Das mit der pretty Methode war ein guter Hinweis.
Ich habe da tatsächlich anstatt string=string.strip() nur string.strip() stehen gehabt.
Aber diese (notwendige) Korrektur führt nicht zum Ziel.

Es scheinen tatsächlich Nullbytes zu sein, die von stream.read angehängt werden.

In eclispe werden die "restlichen" Bytes auch als Rechtecke angezeigt.

Ich frage mich nun wie ich meine 32 Byte langen Arrays auf die richtige Größe stutzen kann.
Falls ihr eine Idee habt, wäre ich auch sehr dankbar wenn ihr sie mir schreibt.

Gruß

Marcus
deets

Code: Alles auswählen


>>> s = 'abcd\0\0\0'
>>> len(s)
7
>>> a = s.strip('\0')
>>> len(a)
4
>>> a
'abcd'
>>> 
bowie_22
User
Beiträge: 7
Registriert: Mittwoch 28. Oktober 2009, 07:14

Vielen Dank!!!! :D

Problem gelöst.

Jetzt kanns weiter gehen.


Gruß

Marcus
Antworten