Articles

Odczytywanie i zapisywanie list do pliku w Pythonie

jako serializowane struktury danych Programiści Pythona intensywnie używają tablic, list i słowników. Przechowywanie tych struktur danych wymaga do pracy pliku lub bazy danych. W tym artykule opisano, jak napisać listę do pliku i jak odczytać ją z powrotem do pamięci.

aby zapisać dane w pliku i odczytać dane z pliku, język programowania Python oferuje standardowe metodywrite() Iread() do obsługi pojedynczej linii, a takżewritelines() Ireadlines() do obsługi wielu linii. Ponadto zarówno modułpickle, jak i modułjson umożliwiają sprytne sposoby radzenia sobie z serializowanymi zbiorami danych.

używając metod odczytu i zapisu

do obsługi znaków (łańcuchów) podstawowe metody działają doskonale. Zapisanie takiej listy wiersz po wierszu do pliku listfile.txt może być wykonane w następujący sposób:

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

w wierszu 6 listitem jest rozszerzony o linijkę” \n”, Po pierwsze i zapisany do pliku wyjściowego, po drugie. Aby odczytać całą listę z pliku listfile.txt z powrotem do pamięci ten kod Pythona pokazuje, jak to działa:

# 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)

pamiętaj, że musisz usunąć linijkę z końca łańcucha. W tym przypadku pomaga nam to, że Python pozwala również na operacje na listach na łańcuchach. W wierszu 8 kodu powyżej to usunięcie jest po prostu wykonane jako operacja listy na samym łańcuchu, który zachowuje wszystko oprócz ostatniego elementu. Ten element zawiera znak „\n”, który reprezentuje linebreak w systemach UNIX/Linux.

używanie metod writelines i readlines

jak wspomniano na początku tego artykułu Python zawiera również dwie metodywritelines() Ireadlines() do zapisu i odczytu wielu linii w jednym kroku, odpowiednio. Aby zapisać całą listę do pliku na dysku, Kod Pythona jest następujący:

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

aby odczytać całą listę z pliku na dysku, Kod Pythona wygląda następująco:

# 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)

Powyższa lista jest zgodna z bardziej tradycyjnym podejściem zapożyczonym z innych języków programowania. Aby napisać to w bardziej Pythoniczny sposób, spójrz na poniższy kod:

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

Po otwarciu plikulistfile.txt w linii 5, przywrócenie listy odbywa się całkowicie w linii 6. Po pierwsze, zawartość pliku jest odczytywana przez readlines(). Po drugie, w pętlifor z każdej linii usuwa się znak liniowy za pomocą metodyrstrip(). Po trzecie, łańcuch jest dodawany do listy miejsc jako nowy element listy. W porównaniu z listą przed kodem jest znacznie bardziej zwarta, ale może być trudniejsza do odczytania dla początkujących programistów Pythona.

korzystając z modułu pickle

różne metody opisywane do tej pory przechowują listę w taki sposób, aby ludzie mogli ją nadal czytać. W przypadku, gdy nie jest to potrzebne, moduł ogórków może stać się dla ciebie bardzo przydatny. Metodadump() efektywnie przechowuje listę jako binarny strumień danych. Po pierwsze, w wierszu 7 (w kodzie poniżej) zostanie otwarty plik wyjściowy listfile.data do zapisu binarnego („WB”). Po drugie, w linii 9
lista jest zapisywana w otwartym pliku przy pomocy metody 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)

w następnym kroku odczytujemy listę z pliku w następujący sposób. Po pierwsze, plik wyjściowy listfile.data jest otwarty binarnie do odczytu („rb”) w linii 4. Po drugie, lista miejsc jest ładowana z pliku przy pomocy metody load().

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

dwa przykłady tutaj pokazują użycie łańcuchów znaków. Chociaż pickle działa ze wszystkimi rodzajami obiektów Pythona, takimi jak ciągi znaków, liczby, samookreślone struktury i każda inna wbudowana struktura danych dostarczana przez Python.

używanie formatu JSON

binarny format danychpickle jest specyficzny dla Pythona. Aby poprawić interoperacyjność między różnymi programami, JavaScript Object Notation (JSON) zapewnia łatwy w użyciu i czytelny dla człowieka schemat, a tym samym stał się bardzo popularny.

poniższy przykład pokazuje, jak napisać listę mieszanych typów zmiennych do pliku wyjściowego za pomocą modułu json. W linii 4 zdefiniowana jest lista podstawowa. Po otwarciu pliku wyjściowego do zapisu w wierszu 7, metodadump() przechowuje listę basic w pliku przy użyciu notacji JSON.

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

odczyt zawartości pliku wyjściowego z powrotem do pamięci jest tak prosty jak zapis danych. Odpowiednia metoda dla dump() nosi nazwę load() I działa w następujący sposób:

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

wnioski

różne metody pokazane powyżej obejmują zakres od prostego zapisu/odczytu danych po dumping/ładowanie danych za pomocą strumieni binarnych przy użyciu pickle i JSON. Upraszcza to uporczywe przechowywanie listy i odczytywanie jej z powrotem do pamięci.

podziękowania

autor pragnie podziękować Zolece Hatitongwe za wsparcie w przygotowaniu artykułu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *