Seite 1 von 1

Probleme mit Replace

Verfasst: Dienstag 4. November 2008, 10:48
von Ingo
Hallo zusammen,

ich bekomme aus meiner Funktion ein bestimmten Zahlenwert herraus.
In diesem Zahlenwert sind allerdings unerwünscht zeichen drin, die ich löschen möchte. Ich habe es mal mit Replace versucht. Leider bekomme ich ein attribute Error. Kann mir jemand helfen?
Mein Code:

Code: Alles auswählen

Tabledata=Tabledata.replace("\n","")

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "j:\Turbo\ar-VTA\ane\anev\Schin\Pyhton\Python_Programm\Richtiges_Programm\_LMG.py", line 45, in On_Instrumentation_lmg_dSPACEPushButtonControl_ButtonUp
 Tabledata=Tabledata.replace("\n","<")
AttributeError: 'list' object has no attribute 'replace'

Verfasst: Dienstag 4. November 2008, 10:50
von Leonidas
Du bekommst keine Zahl sondern eine Liste, in der die Zahl womöglich drin ist. Ich schätze ja, dass du einen String in einer Liste bekommst, keine Zahl.

Verfasst: Dienstag 4. November 2008, 10:53
von HWK
Tabledata scheint eine Liste zu sein. Deshalb z.B. so:

Code: Alles auswählen

tabledata = list(''.join(tabledata).replace('\n', '<'))
Oder wenn es nur um's Löschen geht:

Code: Alles auswählen

while True:
    try:
        tabledata.remove('\n')
    except ValueError:
        break
MfG
HWK

Verfasst: Dienstag 4. November 2008, 11:00
von usta
Hallo Ingo,
du musst ersteinmal deine Zahl aus der liste herausnehmen. falls diese "zahl" vom typ 'str' ist kannst du die replace funktion anwenden:

Code: Alles auswählen

listenelement = Tabledata[i]
listenelement .replace("\n", "")
wobei "i" der listenindex ist, wo dein zu bearbeitendes listenelement steht.
ist die herausgeschribene zahl vom typ 'int', kannst du folgendes machen:

Code: Alles auswählen

listenelement= str(Tabledata[i])
listenelement .replace("\n", "")
natürlich hast du in beiden fällen die originalliste nicht verändert, falls nötig, musst du dann die neuen Werte durch die alten in der liste ersetzen

ich hoffe das konnte dir ein bischen weiterhelfen

Gruß
usta

Verfasst: Dienstag 4. November 2008, 11:09
von Ingo
Die zahl ist in einem array. ich will die zahl nämlich in einer tabelle stehen haben. wenn ich mir den inhalt des arrays anschaue, dann steht am ende der zahl immer \n. das hat die auswirkung, dass in meiner Tabelle die zahl ohne komma drin steht.
beispiel:
7,5E+00 ist die zahl
im array steht dann
7,5E+00\n
und in der tabelle steht dann 75 anstatt 7,5.
Euere vorschläge habe ich probiert, hatte leider nicht die gewünscht wirkung.

Verfasst: Dienstag 4. November 2008, 11:21
von Leonidas
In einem Array oder einer Liste?

Verfasst: Dienstag 4. November 2008, 11:47
von usta
ich habe es eben nochmal mit idle ausprobiert, es muss gehen,....

laut der fehlermeldung ist Tabledata bei dir eine liste,...

so wie dein code aussieht, möchtest du folgendes machen

Code: Alles auswählen

Tabledata[i] = (str(Tabledata[i])).replace("\n", "")
du musst aber den index deines listenelementes kennen, mit denen du die Aktion durchführen möchtest (i). oder du schreibst eine Schleife, der alle listenelemente einmal durchläuft.
.replace kannst du nur auf strings anwenden, du versuchst es bei einer liste anzuwenden. deshalb

Code: Alles auswählen

str(Tabledata[i])


,denn das macht aus deinem listenelement, ein element des datentypen string. erst dann, kannst du .replace ranhängen

Verfasst: Dienstag 4. November 2008, 11:50
von BlackJack
@Ingo: Und was ist in diesem Zusammenhang jetzt eine "Tabelle"!? Ich glaube Du solltest noch einmal darüber Nachdenken, dass jedes Objekt einen Typ hat und von diesem Typ abhängt welche Methoden man darauf aufrufen kann.

Verfasst: Dienstag 4. November 2008, 11:57
von HWK
Wie Leonidas und BlackJack bereits gesagt haben, wären etwas präzisere Informationen hilfreich. Trotzdem noch ein neuer Vorschlag:

Code: Alles auswählen

>>> a = ('7,5E+00\n', '0,34E+03\n', '16,12E-04\n')
>>> [float(x[:-1].replace(',', '.')) for x in a]
[7.5, 340.0, 0.0016119999999999999]
MfG
HWK

Verfasst: Dienstag 4. November 2008, 15:23
von Ingo
Danke für euere Vorschläge. Tut mir leid, dass ich jetzt erst zurück schreibe. Euere Vorschläge funktionieren alle. Leider habe ich folgendes Problem. Ich habe einen Messwert in einer Variablen.
Damit der messwert überhaupt in der tabelle erscheint, muss ich diesen Messwert als Vector schreiben.
Also so
[Variable]
Sobald ich das mache, habe ich \n am messwert und mein komma vom messwert verschwindet. wenn ich jetzt \n entferne erscheint mein Messwert nicht mehr in der Tabelle. wie bekomme ich mein Komma zurück. das ist eigentlich mein Problem.

Verfasst: Dienstag 4. November 2008, 15:30
von Ingo
Ich muss noch dazu sagen, das mein Messwert vom type char ist. es kann daran liegen. gibt es eine möglichkeit diesen messwert in einen string zu verwandeln.

Verfasst: Dienstag 4. November 2008, 15:46
von Leonidas
Was für eine Tabelle? :?:

Verfasst: Dienstag 4. November 2008, 16:04
von HWK
Zeig doch mal den Code. Vielleicht kann man Dir dann besser helfen.
MFG
HWK

Verfasst: Dienstag 4. November 2008, 19:02
von BlackJack
Und was heisst der Messwert ist vom Typ `char`? Wo kommt der Typ her? Ist keiner der Grundatentypen von Python. Meinst Du vielleicht `ctypes.c_char_p`? Dann kommst Du an einen entdprechenden Python-Typ entweder über das `value`- oder das `raw`-Attribut.

Verfasst: Mittwoch 5. November 2008, 08:02
von Ingo
Danke für euere mühe. ich habe das problem gelöst. ich habe meinen messwert vom typ char in float verwandeln müssen, damit er richt in der tabelle angezeigt und abgespeichert wird. danke nochmal