Pergunta

Sempre que tento abrir um arquivo .csv com o comando python fread = open('input.csv', 'r') ele sempre abre o arquivo com espaços entre cada personagem. Eu estou supondo que é algo errado com o arquivo de texto, porque eu posso abrir outros arquivos de texto com o mesmo comando e eles são carregados corretamente. Alguém sabe por que um arquivo de texto iria carregar como este em python?

Graças.

Atualizar

Ok, eu consegui com a ajuda de de Jarret Hardie pós

este é o código que eu usei para converter o arquivo para ascii

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

Obrigado!

Foi útil?

Solução

A mensagem por recursiva é provavelmente certo ... o conteúdo do arquivo são provavelmente codificados com um charset multi-byte. Se este é, de fato, o caso, você provavelmente pode ler o arquivo em si python sem ter que convertê-lo pela primeira vez fora de python.

Tente algo como:

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')

O flag 'b' garante o arquivo é lido como dados binários. Você precisa saber (ou adivinhar) a codificação original ... neste exemplo, eu usei utf-16, mas YMMV. Isto irá converter o arquivo para unicode. Se você realmente tem um arquivo com caracteres multi-byte, eu não recomendo convertendo-a em ascii como você pode acabar perdendo um monte de personagens no processo.

EDIT: Obrigado por fazer o upload do arquivo. Há dois bytes na frente do arquivo que indica que ele, de fato, usar uma grande charset. Se você está curioso, abra o arquivo em um editor hexadecimal como alguns sugeriram ... você vai ver algo na versão de texto como 'I.D. |.' (Etc). O ponto é o byte extra para cada caractere.

O código trecho acima parece funcionar na minha máquina com esse arquivo.

Outras dicas

O arquivo está codificado em alguns codificação unicode, mas você está lendo-o como ascii. Tente converter o arquivo para ascii antes de usá-lo em python.

Não é CSV um arquivo txt simples com valores separados por vírgulas. Basta tentar abri-lo com um editor de texto para ver se o arquivo é formado corretamente.

Para ler um arquivo codificado, você pode simplesmente substituir open com codecs.open.

fread = codecs.open('input.csv', 'r', 'utf-16')

Nunca tinha ocorrido a mim, mas como truppo disse, deve haver algo de errado com o arquivo.

Tente abrir o arquivo em Excel / BrOffice Calc e salvar como o arquivo como CSV novamente.

Se os persiste problema, tente um subconjunto dos dados:. Punho 10 / últimos 10 / intermediárias 10 linhas do arquivo

Ok, eu consegui com a ajuda de de Jarret Hardie pós

este é o código que eu usei para converter o arquivo para ascii

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

Obrigado!

Abra o arquivo em modo binário, 'rb'. Verificá-lo em um editor hexadecimal e verificar se há nula estofamento '00'. Abra o arquivo em algo como Scintilla Editor de Texto para verificar os personagens presentes no arquivo.

Aqui é a maneira rápida e fácil, esp se python não vai analisar a entrada corretamente

sed 's/ \(.\)/\1/g'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top