Articles

Lendo e escrevendo listas para um arquivo em Python

como estruturas de dados serializadas, programadores Python usam intensivamente arrays, listas e dicionários. Armazenar estas estruturas de dados requer persistentemente um arquivo ou um banco de dados para trabalhar com. Este artigo descreve como escrever uma lista para Arquivo, e como ler essa lista de volta para a memória.

Para escrever dados em um arquivo, e para ler dados de um arquivo, a linguagem de programação Python oferece os métodos padrão write() e read() para lidar com uma única linha, bem como writelines() e readlines() para lidar com várias linhas. Além disso, tanto o pickle e o json permite formas inteligentes de lidar com conjuntos de dados serializados também.

usando os métodos de leitura e escrita

para lidar com caracteres (strings) os métodos básicos funcionam excelente. Verão uma lista como essa linha por linha no arquivo listfile.txt pode ser feito da seguinte forma:

# define list of placesplaces = with open('listfile.txt', 'w') as filehandle: for listitem in places: filehandle.write('%s\n' % listitem)

Na linha 6 listitem é estendida por uma quebra de linha “\n”, em primeiro lugar, e armazenado no arquivo de saída, em segundo lugar. Para ler a lista inteira do ficheiro listfile.txt de volta à memória este código em Python mostra-lhe como funciona:

# define an empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: for line in filehandle: # remove linebreak which is the last character of the string currentPlace = line # add item to the list places.append(currentPlace)

tenha em mente que terá de remover a fenda de linha do fim do texto. Neste caso, ele nos ajuda que Python permite operações de lista em strings, também. Na linha 8 do código acima esta remoção é simplesmente feita como uma operação de lista na cadeia em si, que mantém tudo menos o último elemento. Este elemento contém o personagem “\n ” que representa o linebreak em sistemas UNIX/Linux.

Usando o writelines e readlines Métodos

Como mencionado no início deste artigo Python também contém dois métodos de writelines() e readlines() para escrever e ler várias linhas em uma única etapa, respectivamente. Para escrever a lista inteira em um arquivo no disco, o código Python é o seguinte::

# define list of placesplaces_list = with open('listfile.txt', 'w') as filehandle: filehandle.writelines("%s\n" % place for place in places_list)

Para ler a lista inteira a partir de um arquivo no disco, o Python de código é o seguinte:

# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: filecontents = filehandle.readlines() for line in filecontents: # remove linebreak which is the last character of the string current_place = line # add item to the list places.append(current_place)

A listagem acima segue o mais tradicional abordagem emprestado de outras linguagens de programação. Para escrever de uma forma mais Pythonic forma dê uma olhada no código abaixo:

# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: places = 

de Ter aberto o arquivo listfile.txt na linha 5, re-estabelecer a lista passa inteiramente na linha 6. Em primeiro lugar, o conteúdo do arquivo é lido via readlines(). Em segundo lugar, em um laçofor de cada linha o caractere de linebreak é removido usando o método . Em terceiro lugar, a string é adicionada à lista de lugares como um novo item da lista. Em comparação com a listagem antes do código é muito mais compacto, mas pode ser mais difícil de ler para programadores Python iniciantes.

usando o módulo de pickles

os diferentes métodos explicados até agora armazenam a lista de uma forma que os humanos ainda possam lê-la. Caso isso não seja necessário, o módulo pickle pode tornar-se bastante útil para você. Seu método dump() armazena a lista de forma eficiente como um fluxo de dados binário. Em primeiro lugar, na linha 7 (no código abaixo) o arquivo de saída listfile.data é aberto para escrita binária (“wb”). Em segundo lugar, na linha 9
a lista é armazenada no arquivo aberto usando o método dump().

# load additional moduleimport pickle# define a list of placesplacesList = with open('listfile.data', 'wb') as filehandle: # store the data as binary data stream pickle.dump(placesList, filehandle)

como próximo passo, lemos a lista do arquivo da seguinte forma. Em primeiro lugar, o arquivo de saída listfile.data é aberto binário para leitura (“rb”) na Linha 4. Em segundo lugar, a lista de lugares é carregada a partir do arquivo usando o método load().

# load additional moduleimport picklewith open('listfile.data', 'rb') as filehandle: # read the data as binary data stream placesList = pickle.load(filehandle)

os dois exemplos aqui demonstram o uso de cadeias de caracteres. Embora, pickle trabalha com todos os tipos de objetos Python, tais como strings, números, estruturas auto-definidas, e todas as outras estruturas de dados que Python fornece.

usando o formato JSON

o formato binário de dados pickle os usos são específicos do Python. Para melhorar a interoperabilidade entre os diferentes programas, a notação de objeto JavaScript (JSON) fornece um esquema fácil de usar e legível pelo homem, e assim tornou-se muito popular.

o exemplo seguinte demonstra como escrever uma lista de tipos variáveis mistos para um ficheiro de saída usando o módulo json. Na Linha 4 é definida a lista básica. Tendo aberto o arquivo de saída para escrita na linha 7, o método dump() armazena a lista básica no arquivo usando a notação JSON.

import json# define list with valuesbasicList = # open output file for writingwith open('listfile.txt', 'w') as filehandle: json.dump(basicList, filehandle)

ler o conteúdo do ficheiro de saída de volta para a memória é tão simples como escrever os dados. O método correspondente para dump() é o nome load(), e funciona da seguinte forma:

import json# open output file for readingwith open('listfile.txt', 'r') as filehandle: basicList = json.load(filehandle)

Conclusão

Os diferentes métodos mostrados acima variam de simples a escrita/leitura de dados até dumping/carregamento de dados através de fluxos binários usando picles e JSON. Isso simplifica armazenar uma lista persistentemente, e lê-la de volta na memória.

agradecimentos

o autor gostaria de agradecer a Zoleka Hatitongwe pelo seu apoio durante a preparação do artigo.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *