Literal no válido para float (): 0.000001, ¿cómo corregir un error?

Tengo un archivo .csv que contiene 3 columnas de datos. Necesito crear un nuevo archivo de salida que incluya un conjunto específico de datos de la primera y tercera columna del archivo original. La tercera columna contiene valores decimales, y creo que en tal caso he usado la función float () de python. He intentado el siguiente código:

in_file = open("filename.csv", "r") out_file = open("output.csv", "w") while True: line = in_file.readline() if (line == ''): break line = line.strip() items = line.split(',') gi_name = items[0] if (gi_name.startswith("_")) continue p_value = float(items[2]) if (p_value > 0.05): continue out_file.write(','.join([gene_name, str(p_value)])) in_file.close() out_file.close() 

cuando ejecuto lo anterior, recibo el siguiente error:

Error: literal inválido para float (): 0.000001

el valor 0.0000001 es el primer valor en mi conjunto de datos para la tercera columna, y supongo que el código no puede leer más allá de ese conjunto, pero no estoy seguro de por qué. Soy nuevo en Python, y realmente no entiendo por qué recibo este error o cómo solucionarlo. He intentado otras modificaciones sobre cómo ingresar el float (), pero sin éxito. ¿Alguien sabe cómo puedo arreglar esto?

Por lo que has publicado, no está claro si hay algo sutil mal con la cadena que estás intentando pasar a float() (porque parece perfectamente razonable). Intente agregar una statement de impresión de depuración:

 print(repr(items[2])) p_value = float(items[2]) 

Entonces puedes determinar exactamente qué se está pasando a float() . La llamada a repr() hará que incluso los caracteres normalmente invisibles sean visibles. Agregue el resultado a su pregunta y podremos comentar más.

Lo más probable es que su archivo tenga algún carácter imprimible que se lea. Prueba esto:

 >>> a = '0.00001\x00' >>> a '0.00001\x00' >>> print(a) 0.00001 >>> float(a) Traceback (most recent call last): File "", line 1, in  ValueError: invalid literal for float(): 0.00001 

Puede ver que a tiene un carácter NUL que no se imprime con la print o con la excepción de float.