Estoy creando un programa que lee un archivo y si la primera línea del archivo no está en blanco, lee las cuatro líneas siguientes. 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, estoy recibiendo este error:
ValueError: invalid literal for int() with base 10: ''.
Está leyendo la primera línea pero no puede convertirla en un 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())
Forma pitónica de iterar sobre un archivo y convertirlo a int:
for line in open(fname):
if line.strip(): # line contains eol character(s)
n = int(line) # assuming single integer on each line
Lo que intentas hacer es un poco más complicado, pero todavía no es sencillo:
h = open(fname)
for line in h:
if line.strip():
[int(next(h).strip()) for _ in range(4)] # list of integers
De esta manera procesa 5 líneas a la vez. Usa h.next()
en lugar de next(h)
antes de Python 2.6.
La razón por la que tienes ValueError
es porque int
no puede convertir una cadena vacía en un entero. En este caso necesitarías o bien comprobar el contenido de la cadena antes de la conversión, o bien exceptuar un error:
try:
int('')
except ValueError:
pass # or whatever
readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)
Hay un problema con ese código. Lectura" es una nueva línea leída desde el archivo - es una cadena. Por lo tanto, no debe compararla con 0. Además, no puede convertirla en un entero a menos que esté seguro de que lo es. Por ejemplo, las líneas vacías producirán errores aquí (como seguramente ha descubierto).
¿Y por qué necesita el recuento global? Eso'es ciertamente un mal diseño en Python.
Estoy creando un programa que lee un archivo
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 se lee la siguiente línea.
Algo así debería funcionar:
for line in infile:
next_lines = []
if line.strip():
for i in xrange(4):
try:
next_lines.append(infile.next())
except StopIteration:
break
# Do your calculation with "4 lines" here