Wprowadzenie
Programiści Pythona intensywnie używają tablic, list i słowników jako serializowanych struktur danych. Trwałe przechowywanie tych struktur danych wymaga do prawidłowego działania pliku lub bazy danych.
W tym artykule przyjrzymy się, jak zapisać listę do pliku i jak wczytać tę listę z powrotem do pamięci.
Do zapisz dane w plikuOraz odczytać dane z pliku, język programowania Python oferuje standardowe metody write()
i read()
do radzenia sobie z jedną linią, a także writelines()
i readlines()
do radzenia sobie z wieloma liniami. Co więcej, zarówno pickle
oraz json
Moduły pozwalają również na sprytne sposoby radzenia sobie z serializowanymi zestawami danych.
Korzystanie z czytać() i pisać() Metody
Aby radzić sobie ze znakami (ciągami) podstawowe read()
i write()
metody działają doskonale. Zapisywanie takiej listy linia po linii do pliku listfile.txt
można to zrobić w następujący sposób:
places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
with open('listfile.txt', 'w') as filehandle:
for listitem in places:
filehandle.write(f'{listitem}n')
Połączenia listitem
jest przedłużony o łamanie wiersza "n"
, po pierwsze, a następnie przechowywane w pliku wyjściowym. Teraz możemy przyjrzeć się, jak odczytać całą listę z pliku listfile.txt
z powrotem do pamięci:
places = []
with open('listfile.txt', 'r') as filehandle:
for line in filehandle:
curr_place = line[:-1]
places.append(curr_place)
Pamiętaj, że musisz usunąć koniec linii z końca ciągu. W tym przypadku pomaga nam to, że Python pozwala również na operacje listowe na łańcuchach. To usunięcie jest po prostu wykonywane jako operacja listy na samym łańcuchu, który zachowuje wszystko oprócz ostatniego elementu. Ten element zawiera znak "n"
który reprezentuje łamanie linii w systemach UNIX/Linux.
Korzystanie z napisy() i czytane() Metody
Jak wspomniano na początku tego artykułu, Python zawiera również dwie metody – writelines()
i readlines()
– odpowiednio pisać i czytać wiele wierszy w jednym kroku. Zapiszmy całą listę do pliku na dysku:
places_list = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
with open('listfile.txt', 'w') as filehandle:
filehandle.writelines(f"{place for place in places_list}n")
Aby odczytać całą listę z pliku na dysku musimy:
places = []
with open('listfile.txt', 'r') as filehandle:
filecontents = filehandle.readlines()
for line in filecontents:
curr_place = line[:-1]
places.append(curr_place)
Powyższy kod jest zgodny z bardziej tradycyjnym podejściem zapożyczonym z innych języków programowania. Napiszmy to w więcej Pythona droga:
places = []
with open('listfile.txt', 'r') as filehandle:
places = [current_place.rstrip() for current_place in filehandle.readlines()]
Po pierwsze, zawartość pliku jest odczytywana przez readlines()
. Po drugie, w for
pętla z każdej linii znak końca linii jest usuwany za pomocą rstrip()
metoda. Po trzecie, ciąg jest dodawany do listy miejsc jako nowy element listy.
W porównaniu z listingiem przed kodem, kod jest znacznie bardziej zwarty, ale może być trudniejszy do odczytania dla początkujących programistów Pythona.
Korzystanie z modułu Joblib
Początkowe metody wyjaśnione do tej pory przechowują listę w taki sposób, że ludzie mogą ją nadal czytać – dosłownie sekwencyjną listę w pliku. Świetnie nadaje się do tworzenia prostych raportów lub wysyłania plików eksportu do dalszego użytku przez użytkowników, takich jak pliki CSV. Jeśli jednak Twoim celem jest po prostu serializacja listy do pliku, który można później załadować, nie ma potrzeby przechowywania jej w formacie czytelnym dla człowieka.
Połączenia joblib
moduł zapewnia najprostszy sposób na zrzucenie obiektu Pythona (może to być naprawdę dowolny obiekt):
import joblib
places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
joblib.dump(places, 'places.sav')
places = joblib.load('places.sav')
print(places)
joblib
pozostaje najprostszym i najczystszym sposobem na serializowanie obiektów w wydajnym formacie i ładowanie ich później. Możesz użyć dowolnego formatu, takiego jak .sav
, .data
itd. To nie ma znaczenia – oba joblib
i alternatywy, takie jak pickle
odczyta pliki dobrze.
Korzystanie z marynata Moduł
Jako alternatywa dla joblib
, możemy użyć pickle
! Jego dump()
Metoda skutecznie przechowuje listę jako strumień danych binarnych. Po pierwsze, plik wyjściowy listfile.data
jest otwarty do zapisu binarnego ("wb"
). Po drugie, lista jest przechowywana w otwartym pliku za pomocą dump()
metoda:
import pickle
places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
with open('listfile.data', 'wb') as filehandle:
pickle.dump(places, filehandle)
W następnym kroku odczytujemy listę z pliku w następujący sposób. Po pierwsze, plik wyjściowy listfile.data
jest otwarty do odczytu binarnego ("rb"
). Po drugie, lista miejsc jest ładowana z pliku za pomocą load()
metoda:
import pickle
with open('listfile.data', 'rb') as filehandle:
placesList = pickle.load(filehandle)
Dwa przykłady tutaj demonstrują użycie ciągów. Mimo że, pickle
współpracuje ze wszystkimi rodzajami obiektów Pythona, takimi jak ciągi znaków, liczby, samodefiniujące się struktury i każda inna wbudowana struktura danych, którą zapewnia Python.
Korzystanie z formatu JSON
Format danych binarnych pickle
używa jest specyficzne dla Pythona. Aby poprawić współdziałanie między różnymi programami, JavaScript Object Notation (JSON) zapewnia łatwy w użyciu i czytelny dla człowieka schemat, dzięki czemu stał się bardzo popularny w przypadku serializacji plików i udostępniania ich za pośrednictwem interfejsów API.
Zapoznaj się z naszym praktycznym, praktycznym przewodnikiem dotyczącym nauki Git, zawierającym najlepsze praktyki, standardy przyjęte w branży i dołączoną ściągawkę. Zatrzymaj polecenia Google Git, a właściwie uczyć się to!
Poniższy przykład pokazuje, jak napisać listę mieszanych typów zmiennych do pliku wyjściowego za pomocą funkcji json moduł. Po otwarciu pliku wyjściowego do zapisu, dump()
metoda przechowuje podstawową listę w pliku przy użyciu notacji JSON:
import json
basic_list = [1, "Cape Town", 4.6]
with open('listfile.txt', 'w') as filehandle:
json.dump(basic_list, filehandle)
Odczytywanie zawartości pliku wyjściowego z powrotem do pamięci jest tak proste, jak zapisywanie danych. Odpowiednia metoda do dump()
ma nazwę load()
:
import json
with open('listfile.txt', 'r') as filehandle:
basic_list = json.load(filehandle)
Wnioski
Różne metody, które pokazaliśmy powyżej, obejmują proste zapisywanie/odczytywanie danych, aż po zrzucanie/ładowanie danych za pośrednictwem strumieni binarnych przy użyciu pikle i JSON. Upraszcza to trwałe przechowywanie listy i wczytywanie jej z powrotem do pamięci.