Curso
Execute e edite o código deste tutorial online
Executar códigoEste 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:
"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."
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.
pd.read_table('nlp_wiki.txt', header=None, delimiter=None)
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.
pd.read_table('nlp_wiki.txt', header=None, delimiter=None)[0].to_list()
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=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.
np.loadtxt('nlp_wiki.txt', dtype="str", delimiter="\0")
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-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).
with open(filename) as file:
lines = [line.strip() for line in file]
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:
with open("new_nlp_wiki.txt", "w") as file:
file.write("New wiki entry: ChatGPT")
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'):
with open("new_nlp_wiki.txt", "a") as file:
file.write("New wiki entry: ChatGPT")
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!
nlp_wiki = pd.read_table("nlp_wiki.txt", header=None, delimiter=None)
nlp_wiki.to_csv("nlp_wiki_pandas.txt", sep="\t", index=False)
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
- Recursos adicionais: como ler arquivos CSV e web scraping em Python
- Se você gostou de trabalhar com dados de texto, confira o curso Introduction to Importing Data in Python.