Articles

Čtení a zápis seznamů do souboru v Pythonu

jako serializované datové struktury programátoři Pythonu intenzivně používají pole, seznamy a slovníky. Ukládání těchto datových struktur trvale vyžaduje buď soubor nebo databáze pro práci s. Tento článek popisuje, jak napsat seznam do souboru, a jak číst tento seznam zpět do paměti.

zapsat data do souboru, a pro čtení dat ze souboru, programovací jazyk Python nabízí standardní metody write()read() pro nakládání s jeden řádek, stejně jako writelines()readlines() pro řešení s více řádky. Kromě toho modul pickle a json umožňují chytré způsoby řešení serializovaných datových sad.

pomocí metod čtení a zápisu

pro práci se znaky (řetězci) fungují základní metody výborně. Ukládání jako seznam řádek po řádku do souboru listfile.txt může být provedeno následovně:

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

V line 6 listitem je rozšířena o linebreak „\n“, za prvé, a uloženy do výstupního souboru, za druhé. Chcete-li přečíst celý seznam ze seznamu souborůsoubor.txt zpět do paměti tohoto Python kód ukazuje, jak to funguje:

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

Mějte na paměti, že budete muset odstranit linebreak od konce řetězce. V tomto případě nám pomáhá, že Python umožňuje operace seznamu na řetězcích, také. V řádku 8 výše uvedeného kódu se toto odstranění jednoduše provádí jako operace seznamu na samotném řetězci, který uchovává vše kromě posledního prvku. Tento prvek obsahuje znak „\n“, který představuje linebreak v systémech UNIX/Linux.

Použití writelines a Metody readlines

Jak již bylo zmíněno na začátku tohoto článku Python také obsahuje dvě metody writelines()readlines() číst a psát více řádků v jednom kroku, v tomto pořadí. Chcete-li zapsat celý seznam do souboru na disku, kód Pythonu je následující:

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

přečtěte si celý seznam ze souboru na disku Python kód je následující:

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

výpis výše následuje více tradiční přístup, vypůjčené z jiných programovacích jazyků. Napsat to ve více Pythonic způsob, jak se podívat na následující kód:

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

po otevření souboru listfile.txt v řádku 5, re -, kterým se stanoví seznam odehrává v řádku 6. Nejprve je obsah souboru načten pomocí readlines(). Za druhé, ve smyčce for z každého řádku je znak linebreak odstraněn pomocí metody rstrip(). Za třetí, řetězec je přidán do seznamu míst jako nová položka seznamu. Ve srovnání se seznamem před kódem je mnohem kompaktnější,ale může být obtížnější číst pro začínající programátory Pythonu.

pomocí modulu pickle

různé dosud vysvětlené metody ukládají seznam tak, aby jej lidé mohli stále číst. V případě, že to není potřeba, může se vám modul lák hodit. Jeho dump() metoda ukládá seznam efektivně jako binární datový tok. Nejprve se v řádku 7 (v níže uvedeném kódu) otevře výstupní soubor listfile.data pro binární zápis („wb“). Za druhé, v řádku 9
je seznam uložen v otevřeném souboru pomocí 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)

jako další krok čteme seznam ze souboru následujícím způsobem. Nejprve je výstupní soubor listfile.data otevřen binární pro čtení („rb“) v řádku 4. Za druhé, seznam míst je načten ze souboru pomocí metody load().

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

dva příklady zde demonstrují použití řetězců. I když, pickle pracuje se všemi druhy Python objekty, jako jsou řetězce, čísla, self-definované struktury, a každý další vestavěné datové struktury Python poskytuje.

použití formátu JSON

formát binárních dat pickle použití je specifické pro Python. Pro zlepšení interoperability mezi různými programy JavaScript Object Notation (JSON) poskytuje snadno použitelné a čitelné schéma, a tak se stal velmi populární.

následující příklad ukazuje, jak zapsat seznam smíšených typů proměnných do výstupního souboru pomocí modulu json. V řádku 4 je definován základní seznam. Po otevření výstupního souboru pro zápis do řádku 7 uloží metoda dump() základní seznam do souboru pomocí zápisu JSON.

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

čtení obsahu výstupního souboru zpět do paměti je stejně jednoduché jako zápis dat. Odpovídající metoda dump() se jmenuje load(), a funguje následovně:

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

Závěr

různé metody, uvedené výše v rozmezí od jednoduché psaní/čtení dat až dumpingu/načítání dat přes binární proudy pomocí okurkou a JSON. To zjednodušuje trvalé ukládání seznamu a jeho čtení zpět do paměti.

poděkování

autorka by ráda poděkovala Zoleka Hatitongwe za její podporu při přípravě článku.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *