Estou criando um programa que lê um arquivo e se a primeira linha do arquivo não estiver em branco, ele lê as quatro linhas seguintes. Os cálculos são feitos nessas linhas e depois a próxima linha é lida. Se essa linha não estiver vazia, ela continua. No entanto, eu estou recebendo este erro:
ValorError: inválido literalmente para int() com base 10: ''.`
Está lendo a primeira linha, mas não pode't convertê-la para um número inteiro.
O que posso fazer para resolver este problema?
O 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())
Modo pitônico de iterar sobre um arquivo e converter para int:
for line in open(fname):
if line.strip(): # line contains eol character(s)
n = int(line) # assuming single integer on each line
O que você'está tentando fazer é um pouco mais complicado, mas ainda não é simples:
h = open(fname)
for line in h:
if line.strip():
[int(next(h).strip()) for _ in range(4)] # list of integers
Desta forma, processa 5 linhas na altura. Utilize h.next()
ao invés de next(h)
antes do Python 2.6.
A razão pela qual você tinha ValueError
é porque int
não pode converter uma string vazia para o número inteiro. Neste caso você'd precisa verificar o conteúdo da string antes da conversão, ou exceto um erro:
try:
int('')
except ValueError:
pass # or whatever
readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)
Há's um problema com esse código. readings
é uma nova linha lida do arquivo - it's uma string. Portanto você não deve compará-la com 0. Além disso, você pode'não apenas convertê-la para um inteiro a menos que você're sure it's realmente um. Por exemplo, linhas vazias irão produzir erros aqui (como você'certamente descobriu).
E por que você precisa da contagem global? Isso's certamente é um mau design em Python.
estou a criar um programa que lê um arquivo e se a primeira linha do arquivo não está em branco, lê os quatro seguintes linhas. Os cálculos são realizados em essas linhas e depois a próxima linha é leia.
Algo assim deve 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