Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

limpeza arquivo txt em python

Tenho um arquivo txt para trasformar em csv, isso foi facil, porém tem que excluir 3 linhas antes do cabeçalho e excluir uma coluna toda vazia 'Nan'. Eu tentei primeiro transformar em csv e depois tratar essas linhas, mas sem sucesso, então quero tentar excluir essas linhas antes do cabeçalho e a coluna vazia e depois só transformar em csv.

Poderia me ajudar?

7 respostas

Olá Lorena,

Caso não tenha restrição a utilizar a biblioteca pandas, você pode utilizar o csv já gerado (com a coluna e linhas extras mesmo) e com o pandas remover a parte desnecessária e gerar novamente um csv.

Você pode seguir o código abaixo para fazer as alterações:

# O parâmetro skiprows diz para ignorar as primeiras linhas do arquivo
df = pd.read_csv('arquivo.csv', skiprows=3)

# O drop vai remover uma coluna
df.drop('nome_da_coluna', axis=1)

# Por fim você utiliza o método abaixo para salvar as alterações em um novo arquivo csv
df.to_csv('novo_arquivo.csv')

Se possível compartilha por favor o seu código atual e o arquivo txt/csv caso isso não te ajude, assim fica mais fácil pra gente tentar encontrar uma solução.

Espero ter ajudado, qualquer dúvida é só falar!

Bom dia! Muito obrigada pelo retorno inicialmente eu tinha feito assim

BLOCKSIZE = 1048576

with codecs.open('ZV_R0051.txt', "r", "windows-1252") as sourceFile:
    with codecs.open('ZVCSV.csv', "w", "windows-1252") as targetFile:
        while True:
            contents = sourceFile.read(BLOCKSIZE)
            if len(contents.strip()) == 0:
                continue
                contents = sourceFile.read(BLOCKSIZE)
            if not contents:
                break 
            targetFile.write(contents)

ai estava tentando fazer essa tratativa, fazendo o que mandou, fica somente uma coluna como se fosse indice, como faço pra anexar arquivos aqui rs? Porque ai mandava o txt original ou o csv pra vc ver.

Bom dia!

Pode mandar um link do Google drive, Dropbox ou outro que você preferir com o arquivo.

Bom dia, segue o link

https://drive.google.com/open?id=1LImDL0uAx9pbxTxHEs-2izLWbD2B2Cf9

o arquivo txt é o arquivo origem.

Obrigada!

solução!

Refiz o seu código para pular as 3 primeiras linhas e remover a coluna vazia (era a primeira coluna correto?).

O maior problema parece ser o encoding dos arquivos, utilizando windows-1252 tive muitos problemas ao tentar manipular o texto, depois de alguns testes consegui melhores resultados utilizando o encoding UTF-16, esse parece ser o formato do seu arquivo. Ainda assim teve um caractere estranho que teve que ser removido manualmente de cada linha, o caractere "਍ഀ", infelizmente não conheço muito sobre os encodings para encontrar uma solução ideal, mas o código abaixo deve funcionar para fazer a limpeza.

Você está utilizando qual versão do python? O código que eu fiz é baseado no python 3, e pode apresentar problemas em versões anteriores.

Segue o código:

with open('ZV_R0051.txt', mode="r", encoding="UTF-16") as sourceFile, open('ZVCSV.csv', mode="w", encoding="UTF-16") as targetFile:
    # Pula as 3 primeiras linhas
    next(sourceFile)
    next(sourceFile)
    next(sourceFile)

    # Executa esse código do for para cada linha do arquivo
    for line in sourceFile:
        if len(line.strip("਍ഀ").strip()) > 0:
            # O [:-2] foi a forma que eu encontrei de remover o caractere extra
            targetFile.write(line.strip()[:-2])
            targetFile.write("\n")

Espero que isso ajude, se tiver qualquer dúvida ou problema é só falar!

Nossa Senhora, nem sei como agradecer!

Obrigada mesmo!

Sem problemas, bom saber que funcionou!