Sustitución de cadenas en un archivo .data

votos
0

Tengo un problema aparentemente simple. Tengo un conjunto de datos: archive.ics.uci.edu/ml/machine-learning-databases/acute/diagnosis.data y quiero reemplazar el no s 0 s y sí a 1 s

He probado este código:

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()

El único que ocurrió es que los últimos sí / no recibe un ਍ ഀ añadido. No sé por qué no está funcionando.

Publicado el 09/10/2019 a las 18:49
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
1

Desde reemplazar devuelve la cadena modificada que necesita para asignarlo. El original se deja sin tocar. Creo que se necesita:

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)
Respondida el 09/10/2019 a las 18:55
fuente por usuario

votos
0

Su problema puede ser que se abren () no devuelve una lista de cadenas (o algún otro tipo iterable), y por lo tanto no se puede hacer for line in fString:, ya que no va a producir cadenas que luego se puede .replace().

En su lugar lo que necesita hacer algo como:

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()

Este enfoque pone una lista de cadenas, cada una de las cuales es una línea de un archivo, y los itera a través de eso. Usted necesita asegurarse de que se utiliza el .replace()método correctamente, así, porque devuelve la nueva cadena, pero no modifica la cadena original.

Respondida el 09/10/2019 a las 19:08
fuente por usuario

votos
0

El método de cadena .replace devuelve la cadena con los parámetros reemplazados pero no cambia el objeto de modo:

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

Lo que queremos es:

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

o con una variable auxiliar:

aux=line.replace("no","0").replace("yes","1")
Respondida el 09/10/2019 a las 18:58
fuente por usuario

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