Sto creando un programma che legge un file e se la prima riga del file non è vuota, legge le quattro righe successive. I calcoli vengono eseguiti su quelle righe e poi viene letta la riga successiva. Se quella linea non è vuota, continua. Tuttavia, sto ottenendo questo errore:
ValueError: letterale non valido per int() con base 10: ''.
Sta leggendo la prima linea ma non può convertirla in un intero.
Cosa posso fare per risolvere questo problema?
Il codice:
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())
Modo pitonico di iterare su un file e convertire in int:
for line in open(fname):
if line.strip(): # line contains eol character(s)
n = int(line) # assuming single integer on each line
Quello che stai cercando di fare è leggermente più complicato, ma non è ancora semplice:
h = open(fname)
for line in h:
if line.strip():
[int(next(h).strip()) for _ in range(4)] # list of integers
In questo modo elabora 5 linee alla volta. Usate h.next()
invece di next(h)
prima di Python 2.6.
La ragione per cui hai avuto un ValueError
è perché int
non può convertire una stringa vuota in un intero. In questo caso avresti bisogno o di controllare il contenuto della stringa prima della conversione, o di escludere un errore:
try:
int('')
except ValueError:
pass # or whatever
readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)
C'è un problema con questo codice. readings
è una nuova linea letta dal file - è una stringa. Quindi non dovresti confrontarla con 0. Inoltre, non puoi semplicemente convertirla in un numero intero a meno che tu non sia sicuro che lo sia davvero. Per esempio, le linee vuote produrranno errori in questo caso (come avrai sicuramente scoperto).
E perché hai bisogno del conteggio globale? Questo è sicuramente un cattivo design in Python.
Sto creando un programma che legge un file e se la prima riga del file non è vuota, legge le successive quattro righe. I calcoli vengono eseguiti su quelle righe e poi la riga successiva viene letta.
Qualcosa del genere dovrebbe funzionare:
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