Python knihovny pro práci se soubory
Published on: 2020-09-02
1. Knihovna pathlib
Jedná se o knihovnu, která je od pythonu 3.4 built-in a není tedy potřeba ji doinstalovávat.
Základní použití knihovny vypadá následovně
import pathlib
pathlib.Path("folder1/folder2/run.exe")
Output: PosixPath('folder1/folder2/run.exe')
Výše je základní příkaz třídy Path pomocí které se vytváří cesta - objekt cesty. Výstupem tohoto příkazu je PosixPath("cesta")
Základem používání této knihovyn je vytvoření objektu ze stringu pomocí příkazu pathlib.Path('vase/cesta/nekam')
. Po vytvoření objektu PosixPath
si můžete s touto cestou hrát dle své libosti pomocí široké škály method a atributů, které tento objekt na danou cestu poskytuje.
Třída Path se dá použít i bez toho, aniž bychom museli zadat cestu. Třída disponuje metodami jako například cwd()
- vypíše current working directory nebo home()
- který vypíše absolutní cestu k vaší domovské složce.
Z dokumentace můžete být trochu zmatení z těchto dvou příkazů pathlib.Path()
vs pathlib.PurePath()
na první pohled totiž není mezi nimi většího rozdílu. Nicméně po detailním prostudování dokumentace Pathlib dokumentace zjistíme tyto rozdíly:
- Každý dělá jiný typ objektu -
Path()
vytvoří objektPosixPath
kdežtoPurePath
vytvoříPurePosixPath
. Path()
disponuje navíc dalšími metodami, kterými si může šáhnout do souborů na počítači.PurePosixPath
naopak nemá přístup do systému.
Spojování cest
Vytvářet či spojovat cesty můžeme několika způsoby:
from pathlib import Path
p = Path('/home/george/Documents/hello.txt)
p = Path('/', 'home', 'george', 'Documents', 'hello.txt')
p = Path('/home') / 'george' / Path('Documents', 'hello.txt')
p = Path('/home').joinpath('george', 'Documents', 'hello.txt')
pathlib.Path.cwd()
Zjistí v našem systému current working directory. Tedy složku v které se právě nacházíme.
pathlib.Path.cwd()
Output: PosixPath('/Users/your_name/Documents/Python')
pathlib.Path.home()
Vypíše domovskou adresu našeho účtu v operačním systému. Na linuxu by mohla výstupní cesta vypadat jako /home/user_1/
pathlib.Path.home()
Output: PosixPath('/Users/your_name')
pathlib.Path("relativni_cesta").resolve()
Tato metoda nám vytvoří z relativní cesty cestu absolutní. Ovšem pozor, pokud zadáte cestu, která obsahuje lomítko na začátku cesty, tak tento zápis cesty znamená, že zadávate už absolutní cestu.
Cesta s lomítkem
pathlib.Path('/files_introduction/index.ipynb').resolve()
Output: PosixPath('/files_introduction/index.ipynb')
Cesta bez lomítka
pathlib.Path("files_introduction/index.ipynb").resolve()
Output: PosixPath('/Users/your_name/Documents/files_introduction/index.ipynb')
1. Otevírání souborů
Klasické otevírání souborů vypadá nějak takto:
with open(path, mode="r", encoding="UTF-8") as file_:
S knihovnou pathlib lze soubory otevírat velmi podobným způsobem:
with pathlib.Path("cesta").open(mode="r", encoding="UTF-8") as file_:
nebo také to samé rozepsáno:
path = pathlib.Path("cesta")
with path.open(mode="r", encoding="UTF-8") as file_:
Tímto způsobem je spuštěno open() stejně jako v prvním přikladě, ovšem zápis může být pro někoho příjemnější nebo intuitivnější. V zásadě se ale jedná o totéž.
Pomocí třídy Path můžete pro zápis nebo čtení souborů, otevírání souborů rovnou přeskočit pomocí method - read_text(), read_bytes(), write_text(), write_bytes()
pathlib.Path("cesta").read_text()
2. Knihovna os.path
Knihovna os nám pomáhá při práci s počítačem všeobecně. Konkrétně os.path je určena pro práci s cestami. Knihovna je velmi podobná knihovně pathlib, s tím rozdílem, že pathlib je o něco intuitivnější a jeho metody a atribute se mohou svými nazvy lišit. Nicméně pro základní používání najdete obou v knihovnách metody se stejnou funkcí. Tabulku, kde uvidíte, které metody jsou pro obě stejné naleznete v dokumentaci pathlib - corresponding to os module úplně na konci.
3. fnmatch
Pomocí tohoto modulu vytváříme patterny, dle kterých hledáme soubory či adresáře.
Nejedná se o regexy to je úplně něco jiného
4. glob
Metoda glob se používá pro vyhledávání souborů, se specifickým názvem (např. vyhledej v adresáři všechny soubory s příponou .txt), tento název konfigurujeme pomocí fnmatch
viz. dokumentaci pathlib - glob
nebo v naucse.cz
Použité zdroje - další studium
- Portál naučse:
naucse.python.cz/2019/brno-jaro-2019-pondeli/intro/pathlib/
- RealPython: