Importando e escrevendo arquivos de texto em Python
Este artigo mostra diferentes formas de importar arquivos de texto no Python usando Python, NumPy e métodos nativos da linguagem. Também explica como converter esses dados em listas.
Este tutorial mostra como ler arquivos de texto em Python. Esse é um primeiro passo essencial em qualquer projeto que envolva dados de texto, especialmente em Processamento de Linguagem Natural (“NLP”). Existem nuances e armadilhas comuns ao importar arquivos de texto para o Python, o que faz com que cientistas de dados muitas vezes precisem sair de pacotes familiares como o pandas para lidar com texto de forma mais eficiente.
Para aproveitar melhor este artigo, é bom ter conhecimento básico de Python, em especial entender tipos de dados como as diferenças entre strings, inteiros e listas. Ter noção de pandas e do que é um dataframe também ajuda.
Neste tutorial, vamos usar um arquivo de texto simples, que é apenas um copiar e colar do primeiro parágrafo da página da Wikipedia sobre Natural Language Processing. Ele foi salvo como nlp_wiki.txt. O conteúdo é o seguinte:
"Natural language processing (NLP) is an interdisciplinary subfield of linguistics, computer science, and artificial intelligence concerned with the interactions between computers and human language, in particular how to program computers to process and analyze large amounts of natural language data. The goal is a computer capable of "understanding" the contents of documents, including the contextual nuances of the language within them. The technology can then accurately extract information and insights contained in the documents as well as categorize and organize the documents themselves. Challenges in natural language processing frequently involve speech recognition, natural-language understanding, and natural-language generation."Tecnologia
Importando dados de texto em Python
Importando dados com a função read_table() do pandas
A função read_table() do pandas foi feita para ler arquivos de texto delimitados (por exemplo, uma planilha salva como texto, com vírgulas separando as colunas) em um dataframe. Nosso arquivo de texto não é delimitado. É só um trecho de texto copiado e colado. Ainda assim, usar pandas pode ser útil para visualizar rapidamente o conteúdo, já que a sintaxe é parecida com a do read_csv(), com a qual a maioria dos cientistas de dados já está acostumada.
O código abaixo lê um arquivo de texto usando pandas.
Passamos o nome do arquivo de texto e dois argumentos para a função read_table().
header=None informa ao pandas que a primeira linha contém texto, não um cabeçalho.
delimiter=None informa ao pandas para não dividir as linhas em lugar nenhum (exceto nas quebras de linha), de modo que haja uma única coluna com uma linha por parágrafo.
Nesse caso, um DataFrame nem sempre é o ideal. Os parágrafos são separados em linhas individuais (o pandas usa o caractere de quebra de linha para isso) e não conseguimos ver a saída completa. Outra opção é chamar o método .to_list() da coluna.
Isso retorna uma lista que pode ser acessada como uma lista normal do Python. Além disso, imprime o texto completo.
Personalizando a importação com read_table()
A função read_table() tem vários argumentos opcionais, detalhados na documentação oficial. Aqui estão alguns dos mais úteis:
skiprows=n
Pula as primeiras n linhas. No nosso exemplo, pulamos a primeira linha.
nrows=n
Mantém as primeiras n linhas. No nosso exemplo, mantivemos a primeira linha.
skip_blank_lines= True
O pandas vai ignorar quaisquer valores NaN em vez de retornar uma linha vazia.
Importando dados de texto com o loadtxt() do NumPy
O loadtxt() do NumPy foi projetado para ler matrizes de números de um arquivo de texto; porém, ele também pode ler linhas de texto. Isso é conveniente se você já está usando NumPy no restante da análise, pois a saída é um array do NumPy.
Assim como no exemplo com pandas, passamos o argumento delimiter para evitar que as linhas sejam divididas. Aqui, o delimitador precisa ser um único caractere (usar None tem outro comportamento), então usamos o caractere de "terminação nula", \0. Como ele não pode aparecer no meio de uma string, seu uso significa "não usar delimitador".
Também passamos dtype="str", que informa ao NumPy qual tipo de dado dar ao array resultante. No nosso caso, usamos “str”, que retorna strings. Isso também pode ser convertido para lista com a função .tolist().
Importando arquivos de texto com a função nativa open() do Python
Você tem máxima flexibilidade usando os recursos nativos do Python. É menos amigável e pensado principalmente para engenharia de software. Para análise de dados, as soluções com pandas ou NumPy geralmente bastam.
Para usar open(), você também precisa de um context manager, que é a palavra-chave with. Ela aloca os recursos do seu computador apenas enquanto o código indentado abaixo do with está rodando. Neste caso, abrimos o arquivo, fazemos um loop e o armazenamos em memória na variável lines, e depois fechamos.
O laço for aqui usa uma list comprehension: cada item é uma linha conforme interpretada pela função open(), que, neste caso, é separada por uma quebra de linha (\n).
Este bloco de código também usa a função strip(), que remove espaços em branco extras antes e depois de cada objeto (ou linha).
withopen(filename)asfile:
lines =[line.strip()for line infile]Tecnologia
Saída:
Como você pode ver, isso gera uma única lista, em que cada item é um parágrafo. Diferente dos exemplos com pandas e NumPy, temos três objetos aqui porque o texto original tem duas quebras de linha entre os parágrafos.
Escrevendo arquivos de texto em Python
Agora que vimos como importar arquivos de texto em Python, vamos conferir como escrevê-los. Ao escrever arquivos, queremos dizer salvar arquivos de texto na sua máquina a partir do Python. Isso é especialmente útil quando você manipulou textos no Python e quer salvar o resultado.
Escrevendo arquivos de texto com o método nativo write()
Você pode escrever arquivos de texto em Python usando o método nativo write(). Ele também requer o uso de open() e de um context manager com a palavra-chave with. Veja um exemplo:
withopen("new_nlp_wiki.txt","w")asfile:file.write("New wiki entry: ChatGPT")Tecnologia
Neste exemplo, abrimos um arquivo chamado new_nlp_wiki.txt em modo de escrita (o argumento 'w'), o que significa que qualquer conteúdo existente será sobrescrito. Em seguida, chamamos o método write() no objeto do arquivo para escrever a string “New wiki entry: ChatGPT” nele.
Se você quiser acrescentar texto a um arquivo existente, em vez de sobrescrevê-lo, abra o arquivo em modo de append (o argumento 'a'):
withopen("new_nlp_wiki.txt","a")asfile:file.write("New wiki entry: ChatGPT")Tecnologia
Escrevendo arquivos de texto com o método to_csv() do pandas
Provavelmente a forma mais simples de escrever um arquivo de texto usando pandas é com o método to_csv(). Vamos ver isso na prática!
Na primeira linha, lemos um arquivo de texto com o método read_table(), como vimos antes. Depois salvamos o arquivo usando to_csv(), definindo o separador como um caractere de tabulação ('\t') e ajustando o argumento index para False, para excluir o índice das linhas na saída.
Recapitulando
Esperamos que você tenha curtido este tutorial! Para recapitular, aqui está o que foi abordado:
Importação de dados de texto com pandas e NumPy no Python
Escrita de arquivos de texto usando funções nativas do Python e pandas
A importação de dados é a primeira etapa de qualquer projeto de ciência de dados. Saiba por que os cientistas de dados atuais preferem a função read_csv() do pandas para fazer isso.
Descubra como usar \n para inserir quebras de linha em cadeias de caracteres e instruções print(). Use o parâmetro end para manter a saída em uma única linha. Aprimore suas habilidades de manipulação de arquivos com o os.linesep para gerenciar texto em diferentes sistemas.
Descubra o que é a classificação de texto, como ela funciona e os casos de uso bem-sucedidos. Explore exemplos de ponta a ponta de como criar um pipeline de pré-processamento de texto seguido de um modelo de classificação de texto em Python.
Mergulhe na ciência de dados com Python para analisar e visualizar seus dados de forma eficaz. Não precisa ter experiência ou conhecimento em programação.
Este tutorial mostra como ler arquivos de texto em Python. Esse é um primeiro passo essencial em qualquer projeto que envolva dados de texto, especialmente em Processamento de Linguagem Natural (“NLP”). Existem nuances e armadilhas comuns ao importar arquivos de texto para o Python, o que faz com que cientistas de dados muitas vezes precisem sair de pacotes familiares como o pandas para lidar com texto de forma mais eficiente.
Para aproveitar melhor este artigo, é bom ter conhecimento básico de Python, em especial entender tipos de dados como as diferenças entre strings, inteiros e listas. Ter noção de pandas e do que é um dataframe também ajuda.
Se você quer saber sobre importação de dados de arquivos .csv, isso é abordado em pandas read csv() Tutorial: Importing Data. Para aprender mais sobre importação a partir de arquivos JSON e pickle (.pkl), confira o tutorial Importing Data into pandas. Se o seu interesse é fazer web scraping de páginas HTML, Web Scraping using Python (and Beautiful Soup) pode ser para você. Outra opção é começar direto no DataCamp com nosso curso interativo Introduction to Importing Data in Python; o primeiro capítulo é gratuito.
O arquivo de texto
Neste tutorial, vamos usar um arquivo de texto simples, que é apenas um copiar e colar do primeiro parágrafo da página da Wikipedia sobre Natural Language Processing. Ele foi salvo como
nlp_wiki.txt. O conteúdo é o seguinte:Importando dados de texto em Python
Importando dados com a função read_table() do pandas
A função
read_table()do pandas foi feita para ler arquivos de texto delimitados (por exemplo, uma planilha salva como texto, com vírgulas separando as colunas) em um dataframe. Nosso arquivo de texto não é delimitado. É só um trecho de texto copiado e colado. Ainda assim, usar pandas pode ser útil para visualizar rapidamente o conteúdo, já que a sintaxe é parecida com a doread_csv(), com a qual a maioria dos cientistas de dados já está acostumada.O código abaixo lê um arquivo de texto usando pandas.
Saída:
Passamos o nome do arquivo de texto e dois argumentos para a função
read_table().header=Noneinforma ao pandas que a primeira linha contém texto, não um cabeçalho.delimiter=Noneinforma ao pandas para não dividir as linhas em lugar nenhum (exceto nas quebras de linha), de modo que haja uma única coluna com uma linha por parágrafo.Nesse caso, um DataFrame nem sempre é o ideal. Os parágrafos são separados em linhas individuais (o pandas usa o caractere de quebra de linha para isso) e não conseguimos ver a saída completa. Outra opção é chamar o método
.to_list()da coluna.Saída:
Isso retorna uma lista que pode ser acessada como uma lista normal do Python. Além disso, imprime o texto completo.
Personalizando a importação com read_table()
A função
read_table()tem vários argumentos opcionais, detalhados na documentação oficial. Aqui estão alguns dos mais úteis:skiprows=nPula as primeiras n linhas. No nosso exemplo, pulamos a primeira linha.
nrows=nMantém as primeiras n linhas. No nosso exemplo, mantivemos a primeira linha.
skip_blank_lines= TrueO pandas vai ignorar quaisquer valores NaN em vez de retornar uma linha vazia.
Importando dados de texto com o loadtxt() do NumPy
O
loadtxt()do NumPy foi projetado para ler matrizes de números de um arquivo de texto; porém, ele também pode ler linhas de texto. Isso é conveniente se você já está usando NumPy no restante da análise, pois a saída é um array do NumPy.Saída:
Assim como no exemplo com pandas, passamos o argumento delimiter para evitar que as linhas sejam divididas. Aqui, o delimitador precisa ser um único caractere (usar None tem outro comportamento), então usamos o caractere de "terminação nula",
\0. Como ele não pode aparecer no meio de uma string, seu uso significa "não usar delimitador".Também passamos
dtype="str", que informa ao NumPy qual tipo de dado dar ao array resultante. No nosso caso, usamos“str”, que retorna strings. Isso também pode ser convertido para lista com a função.tolist().Importando arquivos de texto com a função nativa open() do Python
Você tem máxima flexibilidade usando os recursos nativos do Python. É menos amigável e pensado principalmente para engenharia de software. Para análise de dados, as soluções com pandas ou NumPy geralmente bastam.
Para usar
open(), você também precisa de um context manager, que é a palavra-chavewith. Ela aloca os recursos do seu computador apenas enquanto o código indentado abaixo do with está rodando. Neste caso, abrimos o arquivo, fazemos um loop e o armazenamos em memória na variável lines, e depois fechamos.O laço for aqui usa uma list comprehension: cada item é uma linha conforme interpretada pela função
open(), que, neste caso, é separada por uma quebra de linha(\n).Este bloco de código também usa a função
strip(), que remove espaços em branco extras antes e depois de cada objeto (ou linha).Saída:
Como você pode ver, isso gera uma única lista, em que cada item é um parágrafo. Diferente dos exemplos com pandas e NumPy, temos três objetos aqui porque o texto original tem duas quebras de linha entre os parágrafos.
Escrevendo arquivos de texto em Python
Agora que vimos como importar arquivos de texto em Python, vamos conferir como escrevê-los. Ao escrever arquivos, queremos dizer salvar arquivos de texto na sua máquina a partir do Python. Isso é especialmente útil quando você manipulou textos no Python e quer salvar o resultado.
Escrevendo arquivos de texto com o método nativo write()
Você pode escrever arquivos de texto em Python usando o método nativo
write(). Ele também requer o uso deopen()e de um context manager com a palavra-chavewith. Veja um exemplo:Neste exemplo, abrimos um arquivo chamado
new_nlp_wiki.txtem modo de escrita (o argumento'w'), o que significa que qualquer conteúdo existente será sobrescrito. Em seguida, chamamos o métodowrite()no objeto do arquivo para escrever a string “New wiki entry: ChatGPT” nele.Se você quiser acrescentar texto a um arquivo existente, em vez de sobrescrevê-lo, abra o arquivo em modo de append (o argumento
'a'):Escrevendo arquivos de texto com o método to_csv() do pandas
Provavelmente a forma mais simples de escrever um arquivo de texto usando pandas é com o método
to_csv(). Vamos ver isso na prática!Na primeira linha, lemos um arquivo de texto com o método read_table(), como vimos antes. Depois salvamos o arquivo usando
to_csv(), definindo o separador como um caractere de tabulação('\t')e ajustando o argumento index para False, para excluir o índice das linhas na saída.Recapitulando
Esperamos que você tenha curtido este tutorial! Para recapitular, aqui está o que foi abordado: