La lista de flotadores de Python termina con un ‘:’ cuando se convierte a una cadena

Tengo una lista de flotadores leídos desde un archivo de texto. Después de algún procesamiento de datos, escribo la lista en un archivo usando:

for val in flist: sa = '{0}'.format(val) fout.write(sa) 

Para archivos de entrada específicos, el archivo de salida tendrá un ‘:’ en la cadena. He ejecutado la depuración y detuve el script en el punto de falla. El valor debe ser 58710000.0

 [Dbg]>>> print val[464] 5870:000.0 [Dbg]>>> fa = val[464] [Dbg]>>> print fa 5870:000.0 [Dbg]>>> [Dbg]>>> fa = fa + 1 [Dbg]>>> print fa 58710001.0 [Dbg]>>> fa = fa - 1 [Dbg]>>> print fa 5870:000.0 

Esto sucede solo para ciertos archivos y flotadores.

¿Alguna sugerencia?

Es un error en Python 2.7.3 o tal vez anterior, con ciertos entornos.

El usuario @ecatmur señaló en una publicación diferente con una pregunta similar, que '9' + 1 = ':' en ASCII

Esto se ha corregido en versiones posteriores de Python.
Específicamente, el problema desapareció en Python 2.7.5 por lo que el problema se ha solucionado.

Vea la respuesta aceptada de Gord Thompson en:

  • Python inserta dos puntos en un número decimal desde Access a través de PyoDBc

Preguntas similares fueron cerradas o no contestadas:

  • Python float obtuvo dos puntos después del punto decimal después de la adición
  • La lista de flotadores de Python termina con un ‘:’ cuando se convierte a una cadena

Tus valores probablemente no son en realidad float . De todos modos, sa = '{0}'.format(val) es tonto; También podrías hacer simplemente sa = str(val) . Pero si haces sa = '%f' % (val,) lugar, obtendrás una excepción cuando val no es un float .

Esto parece ser altamente específico de la plataforma. La repr para float llama a PyOS_double_to_string que termina llamando a PyOS_snprintf, que envuelve a snprintf con algo de código para hacer que la función sea más consistente en todas las plataformas. Aparece en algunas versiones de AIX en particular, snprintf puede producir 0: en lugar de 10.

¿Podría compartir sus valores de sys.platform y sys.version? (El encabezado de la versión se imprimió cuando inicia un intérprete de Python interactivo).

Archivos de origen relevantes: Python / mysnprintf.c para PyOS_snprintf, Objects / floatobject.c para float_repr, Python / pystrtod.c para PyOS_string_to_double.