Krajta

shutil modul v Pythonu

shutil modul v Pythonu
Správa souborů a manipulace se soubory jsou považovány za jeden z nejsložitějších úkolů ve všech programovacích jazycích. Některé programovací jazyky nám poskytují některé nástroje, které abstrahují složité části zpracování souborů pomocí snadno použitelných funkcí a rozhraní. To je přesně to, co Python Shutil modul také.

Python Shutil

Python shutil modul umožňuje vývojářům velmi snadno používat objekty souborů, aniž by zacházel do podrobností o tom, jak věci fungují pod kryty. Tento modul v zásadě abstrahuje od sémantiky nízké úrovně vytváření a správy objektů souborů, jejich čištění, jakmile je použití dokončeno, a umožňuje nám soustředit se na obchodní logiku aplikace. Uvidíme zde mnoho příkladů, pojďme začít.

Příklady s modulem Python Shutil

Budeme studovat různé příklady demonstrující použití Pythonu Shutil modul zde.

Kopírování souboru

S zkopírovat soubor() funkce v Shutil můžeme vytvořit přesnou kopii existujícího souboru kdekoli na stroji. Podívejme se na ukázkový program, abychom demonstrovali, jak toho lze dosáhnout:

import os
importovat závěrku
file_directory = './ Soubory
tisk ('Soubory před:', os.listdir (adresář_souboru))
Shutil.zkopírovat soubor('./ Soubory / ahoj.txt ','./ Files / hello_again.txt ')
tisk ('Soubory po:', os.listdir (adresář_souboru))

Právě jsme zkopírovali soubor, který existuje v daném adresáři, abychom jej naklonovali do stejného adresáře. S tímto příkazem se vrátíme:

Kopie souboru Pythonu Shutil

Dobrá věc na této funkci je, že zmíněná funkce bere jako vstup také název nového souboru, který má být vytvořen.

Kopírování souborů do jiného adresáře

Je možné zkopírovat soubor do nového adresáře pomocí Shutil's kopírovat() funkce. Pojďme se na to podívat v akci:

import os
importovat závěrku
print ('Vytvoření nového adresáře.')
os.mkdir ('LinuxHint')
tisk ('Soubory před:', os.listdir ('LinuxHint'))
Shutil.kopírovat('./ Soubory / ahoj.txt ',' LinuxHint ')
tisk ('Soubory po:', os.listdir ('LinuxHint'))

Podívejme se na výstup tohoto příkazu:

Kopírování souboru do nového adresáře

Pamatujte, že při kopírování souboru pomocí kopírovat() funkce, oprávnění k souboru jsou také klonována ale metadata souboru se nezkopírují. To znamená, že když zkontrolujete, kdy byl tento soubor vytvořen, zobrazí se nový čas, kdy jste spustili tento skript.

Kopírování souboru s metadaty

V poslední části jsme viděli, jak bychom mohli vytvořit kopii souboru. Co když chcete vytvořit přesný klon souboru, který zahrnuje klonování jeho metadat, stejně jako když byl soubor vytvořen atd. To je také možné, ale toto nemusí fungovat v systému založeném na POSIX. Podívejme se na příklad, jak toho lze dosáhnout:

import os
importovat závěrku
čas importu
new_directory = 'LinuxHint'
src_file = './ Soubory / ahoj.txt '
dest_file = './ LinuxHint / ahoj.txt '
def file_metadata (soubor):
stat_info = os.stat (soubor)
print ('Mode:', oct (stat_info.st_mode))
print ('Vytvořeno:', čas.ctime (stat_info.st_ctime))
tisk ('Přístup:', čas.ctime (stat_info.st_atime))
tisk ('Změněno:', čas.ctime (stat_info.st_mtime))
os.mkdir (nový_adresář)
print ('Metadata pro zdrojový soubor:')
file_metadata (src_file)
Shutil.copy2 (src_file, new_directory)
print ('Metadata pro cílový soubor:')
file_metadata (dest_file)

Tady je to, co dostaneme zpět s tímto příkazem, když to spustíme v systému založeném na POSIX (metadata nejsou klonována úplně):

Zkopírujte soubor s metadaty

Na systémech, které nejsou založeny na POSIX, by se i vytvořený a přístupný čas přesně shodoval.

Klonování celého adresáře

V poslední části jsme viděli, jak bychom mohli vytvořit kopii souboru. Zde uvidíme, jak můžeme klonovat kompletní adresář rekurzivně. To znamená, že pokud v adresáři, který chceme klonovat, existuje jiný adresář, budou klonovány také.

importovat tisk
importovat závěrku
import os
src_directory = './ Soubory
dest_directory = './ LinuxHint '
Shutil.copytree (src_directory, dest_directory)
tisk ('Obsah zdroje:')
tisk.pprint (os.listdir (src_directory))
tisk („Obsah cíle:“)
tisk.pprint (os.listdir (dest_directory))

Podívejme se na výstup tohoto příkazu:

Duplikování adresáře

Všimněte si, že adresář, který předáváme copytree (), funguje jako před spuštěním tohoto programu nesmí existovat cílový adresář.

Odstranění adresáře

Odstranění adresáře je velmi snadné pomocí rmtree () funkce v modulu. Podívejme se zde na tuto funkci v akci:

importovat tisk
importovat závěrku
import os
delete_directory = 'LinuxHint'
current_directory = '.''
print ('Obsah před odstraněním:')
tisk.pprint (os.listdir (aktuální_adresář))
Shutil.rmtree (adresář mazání)
print ('Obsah po odebrání:')
tisk.pprint (os.listdir (aktuální_adresář))

Po spuštění skriptu, LinuxTip adresář je odstraněn spolu s obsahem. S tímto příkazem se vrátíme:

Odstranit adresář

Hledání souborů

Pokud chcete najít soubor, který je v proměnné PATH na vašem počítači, můžeme použít který() vyhledejte soubor podle názvu. Podívejme se na ukázkový příklad pro tuto funkci:

importovat závěrku
tisk (Shutil.který ('bsondump'))
tisk (Shutil.which ('no-file-found'))

S tímto příkazem se vrátíme:

Najděte soubor na PATH

Monitorování prostoru souborového systému

S modulem shutil máme funkci disk_usage (), pomocí které můžeme také získat informace o diskovém prostoru o našem stroji. Podívejme se na příklad, který ukazuje tato data lidsky čitelným způsobem:

importovat závěrku
total_b, used_b, free_b = shutil.využití disku('.')
gb = 10 ** 9 # GB == gigabajt
print ('Celkem: : 6.2f GB '.formát (celkem_b / gb))
print ('Použité: : 6.2f GB '.formát (použitý_b / gb))
print ('Zdarma: : 6.2f GB '.formát (free_b / gb))

S tímto příkazem se vrátíme:

Nalezení prostoru souborového systému

Archivace adresářů

Jako poslední příklad uvidíme, jak můžeme archivovat modul zavření adresáře make_archive () funkce. Podívejme se na ukázkový program:

importovat závěrku
import os
archive_directory = \
os.cesta.expanduser (os.cesta.join ('destination-directory-path', 'linuxhint'))
root_dir = os.cesta.expanduser (os.cesta.připojit ('~', '.ssh '))
Shutil.make_archive (archive_directory, 'gztar', root_dir)

S tímto příkazem se vrátíme:

Archivace adresáře

Pokud zrušíte archivaci souboru TAR a podíváte se, bude obsahovat všechny .ssh soubory adresáře v něm.

Závěr

V této lekci jsme se podívali na to, jak můžeme snadno spravovat souborové objekty se soubory na vysoké úrovni Shutil modul v Pythonu. Operace jako kopírování obsahu souboru, vytvoření nové kopie souboru atd. s tímto modulem vypadalo snadno.

Jak změnit levé a pravé tlačítko myši na počítači se systémem Windows 10
Je úplnou normou, že všechna zařízení počítačových myší jsou ergonomicky navržena pro praváky. K dispozici jsou však myší zařízení, která jsou speciál...
Emulace kliknutí myší vznášením pomocí myši Clickless Mouse ve Windows 10
Používání myši nebo klávesnice ve špatném držení těla nadměrného používání může mít za následek mnoho zdravotních problémů, včetně napětí, syndromu ka...
Přidejte gesta myši do Windows 10 pomocí těchto bezplatných nástrojů
V posledních letech se počítače a operační systémy značně vyvinuly. Bývaly doby, kdy uživatelé museli procházet správci souborů pomocí příkazů. Stejně...