Zeichen ersetzen ---> weniger umständlich!

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
acidk
User
Beiträge: 75
Registriert: Samstag 6. Januar 2007, 18:54
Wohnort: Braunschweig

Hallo Leute!
Ich möchte in meinem Text File die Zeichen "[" , "]" und " ' " eliminieren.

Textfile:
['-0.318', '-3.350', '58.140', '17.990']
['-0.364', '3.650', '55.140', '10.990']
['-0.535', '-6.350', '53.140', '15.990']
['-0.584', '-2.350', '62.140', '8.990']
['-0.902', '2.650', '54.140', '8.990']
['-1.600', '-1.350', '52.140', '9.990']
usw....

Mein Code:

Code: Alles auswählen

input1 = file('parsed_percent.txt','r')   
input2 = input1.read()
input3 = input2.replace("[","")
input4 = input3.replace("]", "")
input5 = input4.replace("'", "")

output = file('parsed_percent.txt','w')   
output.write(input5)
output.close()
Funktioniert - finde ich nur extrem umständlich!
Wüsste jemand von Euch jemand eine elegantere Lösung?

Besten Dank
Jona
User
Beiträge: 94
Registriert: Sonntag 23. September 2007, 23:25

mit replace zb so:

Code: Alles auswählen

input.replace("[","").replace("]", "").replace("'", "")
BlackJack

Extrem umständlich finde ich die Lösung eigentlich nicht. Aber unelegant. Wieso so viele Namen? Und die Dateien werden nicht geschlossen.

Code: Alles auswählen

filename = 'parsed_percent.txt'
in_file = open(filename, 'r')
data = in_file.read()
in_file.close()
for character in "[]'":
    data = data.replace(character, '')

out_file = open(filename, 'w')
out_file.write(data)
out_file.close()
Jona
User
Beiträge: 94
Registriert: Sonntag 23. September 2007, 23:25

BlackJack hat geschrieben:

Code: Alles auswählen

for character in "[]'":
    data = data.replace(character, '') 

oh ja, das ist zum löschen natürlich viel schöner.
wie machst du es wenn sie alle mit nem anderen zeichen ersetzt werden sollen?
BlackJack

Code: Alles auswählen

for old, new in ('[(', '])', '\'"'):
    data = data.replace(old, new)
Wenn es wirklich viele Zeichen sind, lohnt sich auch ein Blick auf die `translate()`-Methode von Zeichenketten.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Wenn du das Textfile selbst anlegst, und Menschenlesbarkeit keine Voraussetzung ist, würde sich vielleicht auch die Überlegung lohnen, nicht selber zu parsen und so codieren, sondern einfach Pickle zu nutzen.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Wenn das Textfile jedoch von wo anders herkommt, aber alle Zeilen so aussehen, kannst du jede Zeile einfach mit eval() behandeln und erhältst die entsprechende Liste.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
acidk
User
Beiträge: 75
Registriert: Samstag 6. Januar 2007, 18:54
Wohnort: Braunschweig

Vielen Dank für die schnelle Hilfe!

@Jona:
Ich hatte es schon so ähnlich gehabt - nur leider mit , statt einem . . :oops:
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

BlackJack hat geschrieben:

Code: Alles auswählen

for old, new in ('[(', '])', '\'"'):
    data = data.replace(old, new)
Wenn es wirklich viele Zeichen sind, lohnt sich auch ein Blick auf die `translate()`-Methode von Zeichenketten.
Eine weitere Möglichkeit:

Code: Alles auswählen

import re
data = re.sub("[][,]", "", data)
Das sieht deshalb so komisch aus, weil [ und ] in die Gruppe der Zeichen sollen, und da Gruppen in Regexps in [] gesetzt werden, muss ] das erste Zeichen der Gruppe sein, damit der Compiler weiss, dass die Gruppe dort noch nicht zuende ist. Die Gruppe besteht also aus "],[".

Man könnte statt "[][,]" auch "\[|\]|," oder "[],[]" oder "[[,]|\]" schreiben
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Joghurt: Den Code, den du von BlackJack zitiert hast, ersetzt nicht die drei Zeichen alle mit nichts, sondern jeweils mit einem anderen Zeichen... Aber bezogen auf das urspruengliche Problem waere deine regexp-Variante auch eine Moeglichkeit.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Antworten