Ersetzen Zeichenfolge in einer Datei .data

stimmen
0

Ich habe ein scheinbar einfaches Problem. Ich habe einen Datensatz: archive.ics.uci.edu/ml/machine-learning-databases/acute/diagnosis.data und ich mag die „Nein“ s auf „0“ und „Ja“ zu „1“ ersetzen

Ich habe diesen Code versucht:

fString = open(diagnosis.data,r)

fBool = open(diagnosis1.txt,w)

for line in fString:

        line.replace(no,0)

        line.replace(yes,1)

        fBool.write(line) 

fString.close()

fBool.close()

Das einzige, was passiert ist, dass die letzte ja / nein ein ਍ ഀ wird hinzugefügt. Ich weiß nicht, warum es nicht funktioniert.

Veröffentlicht am 09/10/2019 um 18:49
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
1

Da kehrt die geänderte Zeichenfolge ersetzen, müssen Sie es zuweisen. Das Original wird unberührt gelassen. Ich denke, was Sie brauchen:

with open("diagnosis.data", "r") as fString, open("diagnosis1.txt", "w") as fBool:
    for line in fString:
        nline = line.replace("no", "0")
        nline = nline.replace("yes", "1")
        fBool.write(nline)
Beantwortet am 09/10/2019 um 18:55
quelle vom benutzer

stimmen
0

Ihr Problem sein kann , dass open () keine Liste von Strings zurückgeben (oder einen anderen iterable - Typ), und daher kann man nicht tun for line in fString:, denn das wird nicht Strings ergeben , die Sie dann .replace().

Stattdessen müssen Sie etwas tun:

fString = open("diagnosis.data","r")

lines = fString.read().split('\n')

fBool = open("diagnosis1.txt","w")

for line in lines:

    newLine = line.replace("no","0")

    newLine = newLine.replace("yes","1")

    fBool.write(newLine) 

fString.close()
fBool.close()

Dieser Ansatz wird eine Liste von Strings, von denen jede eine Zeile einer Datei ist, und die Iteration durch das. Sie müssen sicherstellen , dass Sie die Verwendung .replace()Methode korrekt als gut, weil es die neue Zeichenfolge zurückgibt, aber die ursprüngliche Zeichenfolge nicht ändern.

Beantwortet am 09/10/2019 um 19:08
quelle vom benutzer

stimmen
0

Die .replace String-Methode gibt die Zeichenfolge mit den ersetzten Parameter aber es tut das Objekt zu ändern, so:

>>> k="lolo"
>>> k.replace('l','k')
'koko'
>>> k
'lolo'
>>> k=k.replace('l','k')
>>> k
'koko'

Was Sie wollen, ist:

line=line.replace("no","0")

oder mit einer auxiliar Variabel:

aux=line.replace("no","0").replace("yes","1")
Beantwortet am 09/10/2019 um 18:58
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more