texto - string en python
Eliminar todos los sÃmbolos que no sean utf-8 de la cadena (4)
Tengo una gran cantidad de archivos y parser. Lo que tengo que hacer es eliminar todos los símbolos que no sean utf-8 y poner los datos en mongodb. Actualmente tengo código como este.
with open(fname, "r") as fp:
for line in fp:
line = line.strip()
line = line.decode(''utf-8'', ''ignore'')
line = line.encode(''utf-8'', ''ignore'')
de alguna manera todavía me sale un error
bson.errors.InvalidStringData: strings in documents must be valid UTF-8:
1/b62010montecassianomcir/xe2/x86/x90ta0/xe2/x86/x90008923304320733/290066010401040101506055soccorin
No lo entiendo ¿Hay alguna forma sencilla de hacerlo?
UPD : parece que Python y Mongo no están de acuerdo con la definición de la cadena Utf-8 Valid.
Ejemplo para manejar no utf-8 caracteres
import string
test=u"/n/n/n/n/n/n/n/n/n/n/n/n/n/nHi <<First Name>>/nthis is filler text /xa325 more filler./nadditilnal filler./n/nyet more/xa0still more/xa0filler./n/n/xa0/n/n/n/n/nmore/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/nfiller./x03/n/t/t/t/t/t/t almost there /n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/nthe end/n/n/n/n/n/n/n/n/n/n/n/n/n"
print ''''.join(x for x in test if x in string.printable)
Intente debajo de la línea de código en lugar de las dos últimas líneas. Espero eso ayude:
line=line.decode(''utf-8'',''ignore'').encode("utf-8")
Para Python 3, como se menciona en un comentario en este hilo, puedes hacer:
line = bytes(line, ''utf-8'').decode(''utf-8'', ''ignore'')
El parámetro ''ignorar'' evita que se genere un error si alguno de los caracteres no se puede descodificar.
Si su línea ya es un objeto de bytes (por ejemplo, b''my string''
), entonces solo tiene que decodificarlo con decode(''utf-8'', ''ignore'')
.
with open(fname, "r") as fp:
for line in fp:
line = line.strip()
line = line.decode(''cp1252'').encode(''utf-8'')