Estoy creando un programa que lee un archivo y si la primera línea del archivo no está en blanco, lee las siguientes cuatro líneas. Los cálculos se realizan en esas líneas y luego se lee la siguiente línea. Si esa línea no está vacía, continúa. Sin embargo, recibo este error:
ValueError: invalid literal for int() with base 10: ''.
Está leyendo la primera línea pero no puede convertirla en un número entero.
¿Qué puedo hacer para solucionar este problema?
El código:
file_to_read = raw_input("Enter file name of tests (empty string to end program):")
try:
infile = open(file_to_read, 'r')
while file_to_read != " ":
file_to_write = raw_input("Enter output file name (.csv will be appended to it):")
file_to_write = file_to_write + ".csv"
outfile = open(file_to_write, "w")
readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)
minimum = (infile.readline())
maximum = (infile.readline())
with open(file_to_read, 'r') as infile:
allí.Respuestas:
Para que conste:
Me tienes aquí ...
Tiene que ser usado!
fuente
int()
en una cadena vacía. "Usar float () en su lugar" no resuelve ese problema. Aún obtienes un ValueError.Los siguientes son totalmente aceptables en python:
int
float
float
int
float
Pero se obtiene una
ValueError
si pasa una representación de cadena de un flotador enint
, o una representación de cadena de cualquier cosa menos un entero (incluyendo cadena vacía). Si desea pasar una representación de cadena de un flotante a unint
, como @katyhuff señala arriba, puede convertir primero a un flotante, luego a un entero:fuente
int()
en una cadena vacía. "Usar float () en su lugar" no resuelve ese problema. Aún obtienes un ValueError.int(float(x))
. Como esta es la primera pregunta que aparece al buscar este error.Forma pitónica de iterar sobre un archivo y convertir a int:
Lo que estás tratando de hacer es un poco más complicado, pero aún no es sencillo:
De esta manera procesa 5 líneas a la vez. Usar en
h.next()
lugar denext(h)
antes de Python 2.6.La razón que tenía
ValueError
es porqueint
no puede convertir una cadena vacía al entero. En este caso, deberá verificar el contenido de la cadena antes de la conversión o, salvo un error:fuente
n = int(line) if line.is_integer() else int(float(line))
Encontré una solución. Python convertirá el número en un flotador. Simplemente llamar a float primero y luego convertirlo a int funcionará:
output = int(float(input))
fuente
La razón es que está obteniendo una cadena vacía o una cadena como argumento en int. Compruebe si está vacío o si contiene caracteres alfabéticos. Si contiene caracteres, simplemente ignore esa parte.
fuente
La razón por la que obtiene este error es porque está tratando de convertir un carácter de espacio en un entero, lo cual es totalmente imposible y restringido, y es por eso que está obteniendo este error.
Verifique su código y corríjalo, funcionará bien
fuente
Entonces si tienes
Puedes convertirlo a
int
confloatInInt = int(float(floatInString))
fuente
Tienes un problema con esta línea:
Esto no encuentra una cadena vacía. Encuentra una cadena que consta de un espacio. Presumiblemente esto no es lo que estás buscando.
Escucha los consejos de todos los demás. Este no es un código de Python muy idiomático, y sería mucho más claro si itera sobre el archivo directamente, pero creo que también vale la pena señalar este problema.
fuente
Pruebe esta función (
split()
) en un archivo simple. Estaba enfrentando el mismo problema y descubrí que era porquesplit()
no estaba escrito correctamente (manejo de excepciones).fuente
Hay un problema con ese código.
readings
es una nueva línea leída del archivo, es una cadena. Por lo tanto, no debe compararlo con 0. Además, no puede convertirlo a un entero a menos que esté seguro que es uno. Por ejemplo, las líneas vacías producirán errores aquí (como seguramente habrá descubierto).¿Y por qué necesitas el conteo global? Eso es ciertamente un mal diseño en Python.
fuente
Esto también puede suceder cuando tiene que asignar números enteros separados por espacios a una lista pero ingresa los números enteros línea por línea usando
.input()
. Por ejemplo, estaba resolviendo este problema en HackerRank Bon-Appetit , y obtuve el siguiente error al compilarEntonces, en lugar de dar entrada al programa línea por línea, intente mapear los enteros separados por espacios en una lista utilizando el
map()
método.fuente
Algo como esto debería funcionar:
fuente
Estaba recibiendo errores similares, resulta que el conjunto de datos tenía valores en blanco que Python no podía convertir a entero.
fuente
Tuve el mismo problema al intentar usar readlines () dentro del bucle para el mismo objeto de archivo ... Mi sospecha es que disparar readling () dentro de readline () para el mismo objeto de archivo causó este error.
La mejor solución puede ser usar seek (0) para restablecer el puntero del archivo o manejar la condición con la configuración de algún indicador y luego crear un nuevo objeto para el mismo archivo al verificar la condición establecida ...
fuente
Recientemente me encontré con un caso en el que ninguna de estas respuestas funcionó. Encontré datos CSV donde había bytes nulos mezclados con los datos, y esos bytes nulos no se eliminaron. Entonces, mi cadena numérica, después de la eliminación, consistía en bytes como este:
Para contrarrestar esto, hice:
... donde fields es una lista de valores csv resultantes de dividir la línea.
fuente
Esto parece que las lecturas son a veces una cadena vacía y obviamente aparece un error. Puede agregar una comprobación adicional a su ciclo while antes del comando int (lecturas) como:
fuente
Me costó averiguar la razón real, sucede cuando no leemos correctamente del archivo. necesita abrir el archivo y leer con el método readlines () como se muestra a continuación:
Corrige la salida formateada
fuente
su respuesta es arrojar errores debido a esta línea
fuente