Tengo un problema para el que tengo una solución. Espero eliminar la solución para mejorar la eficiencia de la producción.
El servidor de mi asociado ejecuta automáticamente un script que da salida a un gran archivo de datos de investigación (todo texto) en un json
y lo guarda como un enorme (4MB+) .json
archivo.
Recupero este archivo vía ftp. Tengo entendido que el software de ftp (Fetch) me entrega el archivo tal y como se ha guardado.
Cuando intento procesar el contenido del archivo (desde el Terminal) usando un script de Python, recibo este error:
Traceback (most recent call last):
File "/Users/me/Documents/client drop folders/client1/pythonScript.py", line 61, in <module>
sourceData = json.loads(line.decode("utf-8"))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 2547902: invalid continuation byte
El carácter en esta posición es un espacio - aunque esto parece discutible, considerando mi solución:
Mi solución es simplemente abrir el archivo y volver a guardarlo (ya sea usando el diálogo de guardado estándar de VSCode o simplemente usando el TextEdit de mi Mac y eligiendo guardar con utf-8
y una codificación de caracteres .json
) y sobrescribiendo el archivo.
El archivo Python procesa el json sin errores después de este re-guardado del archivo fuente.
Si corro file -I sourceFile.json
en el guardado antes de volver a guardarlo, entonces produce:
sourceFile.json: text/plain; charset=utf-8
Después de volver a guardar, el mismo comando de Terminal produce lo mismo:
sourceFile.json: text/plain; charset=utf-8
¿Por qué el archivo tiene un rendimiento diferente antes y después de volver a guardarlo?
Agradecería cualquier consejo o respuesta con conocimiento de causa. ¿Existe algún método de resolución de problemas mejor que el Terminal file -I
¿comando?
Gracias de antemano.
Apéndices:
salida diff:
1c1
< (entire content of file 1 from server)
\ No newline at end of file
---
> (entire content of file 2 saved on Mac)
\ No newline at end of file
salida del cmp:
old/file.json new/file.json differ: char 2547903, line 1