Seite 1 von 1

Zeichen ersetzen ---> weniger umständlich!

Verfasst: Freitag 19. Oktober 2007, 11:28
von acidk
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

Verfasst: Freitag 19. Oktober 2007, 11:34
von Jona
mit replace zb so:

Code: Alles auswählen

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

Verfasst: Freitag 19. Oktober 2007, 11:38
von 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()

Verfasst: Freitag 19. Oktober 2007, 11:41
von Jona
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?

Verfasst: Freitag 19. Oktober 2007, 11:44
von 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.

Re: Zeichen ersetzen ---> weniger umständlich!

Verfasst: Freitag 19. Oktober 2007, 12:31
von keppla
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.

Verfasst: Freitag 19. Oktober 2007, 12:47
von birkenfeld
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.

Verfasst: Freitag 19. Oktober 2007, 12:57
von acidk
Vielen Dank für die schnelle Hilfe!

@Jona:
Ich hatte es schon so ähnlich gehabt - nur leider mit , statt einem . . :oops:

Verfasst: Freitag 19. Oktober 2007, 14:53
von Joghurt
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

Verfasst: Freitag 19. Oktober 2007, 15:02
von Rebecca
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.