Reading and Writing Lists to a File in Python
as serialized data structures, Python programozók intenzíven használja tömbök, listák, szótárak. Ezeknek az adatstruktúráknak a tartós tárolása megköveteli, hogy egy fájl vagy adatbázis működjön együtt. Ez a cikk leírja, hogyan kell írni egy listát a fájlba, és hogyan kell olvasni, hogy a lista vissza a memóriába.
az adatok fájlba írásához, valamint egy fájlból származó adatok olvasásához a Python programozási nyelve a write()
és read()
standard módszereket kínálja egyetlen sor kezelésére, valamint a writelines()
és readlines()
több sor kezelésére. Továbbá mind a pickle
, mind a json
modul lehetővé teszi a szerializált adatkészletek kezelésének okos módjait is.
A
olvasási és írási módszerek segítségével a karakterek (karakterláncok) kezeléséhez az alapvető módszerek kiválóan működnek. Egy ilyen lista soronkénti mentése a listfile.txt
fájlba a következőképpen hajtható végre:
# define list of placesplaces = with open('listfile.txt', 'w') as filehandle: for listitem in places: filehandle.write('%s\n' % listitem)
a 6.sorban a listitem
meghosszabbodik egy linebreak “\n”, először a kimeneti fájlba tárolva, másodszor. A teljes lista elolvasása a fájllistábólfájlt.txt vissza a memóriába ez a Python kód megmutatja, hogyan működik:
# 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)
ne feledje, hogy el kell távolítania a vonaltörést a karakterlánc végétől. Ebben az esetben segít nekünk, hogy a Python lehetővé teszi a listázási műveleteket a karakterláncokon is. A fenti kód 8. sorában ez az Eltávolítás egyszerűen listaműveletként történik a karakterláncon, amely mindent, kivéve az utolsó elemet. Ez az elem tartalmazza a “\n” karaktert, amely a UNIX/Linux rendszereken a vonaltörést képviseli.
A
writelines és readlines metódusok használata a cikk elején említettek szerint a Python a két módszert is tartalmazza writelines()
és readlines()
több sor írásához és olvasásához egy lépésben. A teljes lista lemezre írásához a Python kód a következő:
# define list of placesplaces_list = with open('listfile.txt', 'w') as filehandle: filehandle.writelines("%s\n" % place for place in places_list)
a teljes lista olvasása a lemezen lévő fájlból a Python kód a következő:
# 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 fenti felsorolás egy hagyományosabb megközelítést követ, amelyet más programozási nyelvektől kölcsönöztek. Ha Pitonikus módon szeretné megírni, nézze meg az alábbi kódot:
# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: places =
miután megnyitotta a listfile.txt
fájlt az 5.sorban, a lista visszaállítása teljes egészében a 6. sorban történik. Először is, a fájl tartalmát olvassa keresztül readlines()
. Másodszor, egyfor
hurokban minden sorból a linebreak karakter eltávolításra kerül arstrip()
módszerrel. Harmadszor, a karakterlánc új listaelemként kerül hozzáadásra a helyek listájához. Összehasonlítva a lista előtt a kód sokkal kompaktabb, de nehezebb lehet olvasni a kezdő Python programozók.
a savanyúság modul használata
a különböző módszerek eddig magyarázták a listát oly módon, hogy az emberek még mindig el tudják olvasni. Abban az esetben, ha erre nincs szükség, a savanyúság modul nagyon hasznos lehet az Ön számára. Adump()
módszer hatékonyan tárolja a listát bináris adatfolyamként. Először is, a 7.sorban (az alábbi kódban) a listfile.data
kimeneti fájl bináris íráshoz (“wb”) nyílik meg. Másodszor, a 9. sorban
a listát a megnyitott fájl tárolja a dump()
módszerrel.
# 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)
a következő lépésben a fájlt a következőképpen olvassuk el. Először is, a listfile.data
kimeneti fájl bináris formátumban nyílik meg az olvasáshoz (“rb”) a 4.sorban. Másodszor, a helyek listája a load()
módszerrel kerül betöltésre a fájlból.
# load additional moduleimport picklewith open('listfile.data', 'rb') as filehandle: # read the data as binary data stream placesList = pickle.load(filehandle)
a két példa itt a húrok használatát mutatja be. Bár, pickle
működik mindenféle Python objektumok, mint a húrok, számok, saját definiált struktúrák, és minden más beépített adatstruktúra Python biztosít.
a JSON formátum használata
a bináris adatformátumpickle
a felhasználás a Python-ra jellemző. A különböző programok közötti interoperabilitás javítása érdekében a JavaScript Object Notation (JSON) egy könnyen használható, ember által olvasható sémát biztosít, így nagyon népszerűvé vált.
a következő példa bemutatja, hogyan lehet vegyes változótípusok listáját írni egy kimeneti fájlba a json modul segítségével. A 4. sorban az alaplista meg van határozva. Miután megnyitotta a kimeneti fájlt a 7. sorban történő íráshoz, a dump()
módszer tárolja az alaplistát a fájlban a JSON jelölés segítségével.
import json# define list with valuesbasicList = # open output file for writingwith open('listfile.txt', 'w') as filehandle: json.dump(basicList, filehandle)
a kimeneti fájl tartalmának visszaolvasása a memóriába olyan egyszerű, mint az adatok írása. A megfelelő módszer, hogy a dump()
neve load()
lehetőséget, majd a következők szerint működik:
import json# open output file for readingwith open('listfile.txt', 'r') as filehandle: basicList = json.load(filehandle)
Következtetés
A különböző módszerek fent látható tartományban egyszerű írás/olvasás adatokat dömping/terhelési adatok segítségével bináris stream használata uborka, valamint a JSON. Ez leegyszerűsíti a lista tartós tárolását, és visszaolvasását a memóriába.
elismerések
a szerző szeretné megköszönni Zoleka Hatitongwe támogatását a cikk elkészítése során.