Estou criando um programa que lê um arquivo e, se a primeira linha do arquivo não estiver em branco, ele lerá as próximas quatro linhas. Os cálculos são realizados nessas linhas e, em seguida, a próxima linha é lida. Se essa linha não estiver vazia, ela continua. No entanto, estou recebendo este erro:
ValueError: invalid literal for int() with base 10: ''.
Está lendo a primeira linha, mas não pode convertê-la em um número inteiro.
O que posso fazer para corrigir esse 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())
with open(file_to_read, 'r') as infile:
lá.Respostas:
Apenas para o registro:
Me pegou aqui ...
Tem que ser usado!
fonte
int()
uma string vazia. "Usar float ()" não resolve esse problema. Você ainda recebe um ValueError.Os seguintes itens são totalmente aceitáveis em python:
int
float
float
int
float
Mas você começa a
ValueError
se passar uma representação de cadeia de um flutuador emint
, ou a representação cadeia de qualquer coisa mas um inteiro (incluindo string vazia). Se você deseja passar uma representação de string de um float para umint
, como @katyhuff aponta acima, você pode converter primeiro em um float e depois em um número inteiro:fonte
int()
uma string vazia. "Usar float ()" não resolve esse problema. Você ainda recebe um ValueError.int(float(x))
. Como esta é a primeira pergunta a aparecer ao procurar esse erro.Maneira pitônica de iterar sobre um arquivo e converter para int:
O que você está tentando fazer é um pouco mais complicado, mas ainda não é direto:
Desta forma, processa 5 linhas por vez. Use em
h.next()
vez denext(h)
antes do Python 2.6.A razão que você teve
ValueError
foi porqueint
não é possível converter uma sequência vazia para o número inteiro. Nesse caso, você precisa verificar o conteúdo da string antes da conversão ou exceto um erro:fonte
n = int(line) if line.is_integer() else int(float(line))
Eu encontrei um trabalho ao redor. Python converterá o número em um flutuador. Simplesmente chamar float primeiro e depois converter isso para um int funcionará:
output = int(float(input))
fonte
O motivo é que você está obtendo uma string vazia ou uma string como argumento no int. Verifique se está vazio ou se contém caracteres alfa. Se ele contiver caracteres, simplesmente ignore essa parte.
fonte
O motivo pelo qual você está recebendo esse erro é que está tentando converter um caractere de espaço em um número inteiro, o que é totalmente impossível e restrito. E é por isso que você está recebendo esse erro.
Verifique seu código e corrija, ele funcionará bem
fonte
Então se você tem
Você pode convertê-lo para
int
comfloatInInt = int(float(floatInString))
fonte
Você tem um problema com esta linha:
Isso não encontra uma string vazia. Ele encontra uma string que consiste em um espaço. Presumivelmente, não é isso que você está procurando.
Ouça os conselhos de todos os outros. Este não é um código python muito idiomático e seria muito mais claro se você iterar diretamente sobre o arquivo, mas acho que esse problema também vale a pena notar.
fonte
Por favor, teste esta função (
split()
) em um arquivo simples. Eu estava enfrentando o mesmo problema e descobri que era porquesplit()
não foi escrito corretamente (manipulação de exceção).fonte
Há um problema com esse código.
readings
é uma nova linha lida no arquivo - é uma string. Portanto, você não deve compará-lo com 0. Além disso, você não pode simplesmente convertê-lo em um número inteiro, a menos que tenha certeza que é realmente um. Por exemplo, linhas vazias produzirão erros aqui (como você certamente descobriu).E por que você precisa da contagem global? Esse certamente é um design ruim em Python.
fonte
Isso também pode acontecer quando você precisa mapear números inteiros separados por espaço para uma lista, mas insere os números inteiros linha por linha usando o
.input()
. Como por exemplo, eu estava resolvendo esse problema no HackerRank Bon-Appetit , e recebi o seguinte erro ao compilarPortanto, em vez de dar entrada ao programa linha por linha, tente mapear os números inteiros separados por espaço em uma lista usando o
map()
métodofonte
Algo assim deve funcionar:
fonte
Eu estava recebendo erros semelhantes, verifica-se que o conjunto de dados tinha valores em branco que o python não pôde converter em número inteiro.
fonte
Entrei no mesmo problema ao tentar usar o readlines () dentro do loop for para o mesmo objeto de arquivo ... Minha suspeita é disparar readling () dentro do readline () para o mesmo objeto de arquivo causou esse erro.
A melhor solução pode ser usar seek (0) para redefinir o ponteiro do arquivo ou manipular a condição com a definição de algum sinalizador e criar um novo objeto para o mesmo arquivo, verificando a condição definida ....
fonte
Recentemente, deparei-me com um caso em que nenhuma dessas respostas funcionava. Encontrei dados CSV onde havia bytes nulos misturados com os dados e esses bytes nulos não foram removidos. Então, minha string numérica, após a remoção, consistia em bytes como este:
Para combater isso, eu fiz:
... where fields é uma lista de valores csv resultantes da divisão da linha.
fonte
Às vezes, parece que as leituras são uma string vazia e, obviamente, surge um erro. Você pode adicionar uma verificação extra ao seu loop while antes do comando int (leituras) como:
fonte
Eu tive dificuldade em descobrir o motivo real, isso acontece quando não lemos corretamente do arquivo. você precisa abrir o arquivo e ler com o método readlines () como abaixo:
Corrige a saída formatada
fonte
sua resposta está gerando erros por causa dessa linha
fonte