Seite 1 von 1

Verständnisfrage lstrip, rstrip bzw, strip

Verfasst: Samstag 10. Dezember 2011, 06:42
von bowie_22
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!

Re: Verständnisfrage lstrip, rstrip bzw, strip

Verfasst: Samstag 10. Dezember 2011, 08:09
von gkuhl
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

Re: Verständnisfrage lstrip, rstrip bzw, strip

Verfasst: Samstag 10. Dezember 2011, 11:28
von 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.

Re: Verständnisfrage lstrip, rstrip bzw, strip

Verfasst: Samstag 10. Dezember 2011, 17:27
von bowie_22
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

Re: Verständnisfrage lstrip, rstrip bzw, strip

Verfasst: Samstag 10. Dezember 2011, 17:33
von deets

Code: Alles auswählen


>>> s = 'abcd\0\0\0'
>>> len(s)
7
>>> a = s.strip('\0')
>>> len(a)
4
>>> a
'abcd'
>>> 

Re: Verständnisfrage lstrip, rstrip bzw, strip

Verfasst: Samstag 10. Dezember 2011, 17:40
von bowie_22
Vielen Dank!!!! :D

Problem gelöst.

Jetzt kanns weiter gehen.


Gruß

Marcus