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.