1
resposta

Arquivo Texto Largura Fixa

Boa tarde,

Qual a melhor forma para importar um arquivo texto que a limitação seja por largura fixa, tal como no excel;

Obrigado

1 resposta

Oi Fabiano! Tudo tranquilinho?

No caso da importação de arquivos de texto de largura fixa, conforme é feito nesse vídeo (link para o vídeo) no excel, nós podemos perceber que tais tipos de arquivo não seguem nenhum padrão específico, certo?

Nesse vídeo, ela separa os dados de acordo com os tamanhos dos nomes das colunas. No Python não será muito diferente, para fazer a importação desse tipo de arquivo vamos utilizar a função read_fwf (documentação da função read_fwf) da biblioteca pandas e precisaremos dos nomes das colunas do nosso arquivo.

Vamos fazer um exemplo para entendermos melhor.

Nesse exemplo, eu quero importar os seguintes dados: Alunos Matriculados IFB-Dezembro 2018.txt (que são os mesmos dados do vídeo que referenciei logo acima)

Para fazer as devidas separações das colunas deste arquivo, vamos precisar da quantidade de caracteres de todos os nomes das colunas, incluindo os espaços. Para isso, podemos pegar a primeira linha do arquivo e pressionar Ctrl + C para copiá-la:

Imagem de parte dos dados utilizados nesse exemplo, com a primeira linha desses dados destacadas com um retângulo vermelho

Após isso, podemos armazenar cada um desses nomes em uma lista, devidamente separados (incluindo os espaços):

nome_das_colunas_do_arquivo = ['unidade_ensino', 'modalidade_ensino ', 'tipo_curso                  ', 'tipo_oferta          ', 'Ano ', 'Status_Matricul', 'Quantidade']

Porém, o que nós precisamos é da quantidade de caracteres de cada nome de coluna para conseguirmos separar esses dados, certo? Para contar essa quantidade de caracteres podemos fazer um list comprehension:

lista_de_larguras = [len(nome_das_colunas_do_arquivo[i]) for i in range]
print(lista_de_larguras)

Resultado:

[14, 18, 28, 21, 4, 15, 10]

A nossa lista_de_larguras contém a quantidade de caracteres do nome de cada coluna, ou seja, ela contém a largura de cada coluna. Portanto, podemos fazer a importação dos dados utilizando a função read_fwf:

df = pd.read_fwf("Alunos Matriculados IFB-Dezembro 2018.txt", widths = lista_de_larguras)

Esse parâmetro “widths” significa “largura”, por isso passamos a lista contendo a largura de cada uma das nossas colunas para que a função possa fazer a separação dessas colunas corretamente.

Com isso, nossos dados ficarão assim:

Imagem do dataframe resultante da importação dos dados

Com as colunas certinhas e separadas :)

Tenta realizar o mesmo processo do exemplo acima para importar seus dados e depois me conta aqui se funcionou.

Qualquer dúvida que tiver me fala que nós vamos conversando por aqui, tá bom?

Bons estudos!