Probleme mit Replace

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
Ingo
User
Beiträge: 59
Registriert: Dienstag 21. Oktober 2008, 09:51

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'
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
usta
User
Beiträge: 12
Registriert: Sonntag 5. Oktober 2008, 13:34
Wohnort: Bremen

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
Ingo
User
Beiträge: 59
Registriert: Dienstag 21. Oktober 2008, 09:51

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

In einem Array oder einer Liste?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
usta
User
Beiträge: 12
Registriert: Sonntag 5. Oktober 2008, 13:34
Wohnort: Bremen

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
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.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Ingo
User
Beiträge: 59
Registriert: Dienstag 21. Oktober 2008, 09:51

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.
Ingo
User
Beiträge: 59
Registriert: Dienstag 21. Oktober 2008, 09:51

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Was für eine Tabelle? :?:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Zeig doch mal den Code. Vielleicht kann man Dir dann besser helfen.
MFG
HWK
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.
Ingo
User
Beiträge: 59
Registriert: Dienstag 21. Oktober 2008, 09:51

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
Antworten