Python shutil
A Python shutil modul lehetővé teszi a fejlesztő számára, hogy a fájlobjektumokat nagyon egyszerűen és anélkül dolgozza fel mélyebben, hogy miként működnek a takaró alatt. Ez a modul alapvetően elvonja a fájlobjektumok létrehozásának és kezelésének alacsony szintű szemantikáját, megtisztítja őket, ha a használat befejeződött, és lehetővé teszi számunkra, hogy az alkalmazás üzleti logikájára összpontosítsunk. Sok példát fogunk itt látni, kezdjük.
Példák Python shutil modullal
Különböző példákat fogunk tanulmányozni, amelyek bemutatják a Python használatát shutil modul itt.
Fájl másolása
A ... val fájl másolás, fájl másolása() funkció be shutil modul segítségével egy létező fájl pontos másolatát készíthetjük a gép bárhol. Nézzünk meg egy mintaprogramot, hogy bemutassuk, hogyan lehet ezt megtenni:
import osimport shutil
file_directory = './ Fájlok
print ('Fájlok előtt:', os.listdir (fájl_könyvtár))
shutil.fájl másolás, fájl másolása('./ Fájlok / szia.txt ','./ Fájlok / hello_again.txt ')
print ('Fájlok után:', os.listdir (fájl_könyvtár))
Csak átmásoltunk egy fájlt, amely az adott könyvtárban található, hogy a fájlt ugyanabba a könyvtárba klónozzuk. Íme, amit ezzel a paranccsal kapunk vissza:
Python shutil fájl másolat
Ebben a függvényben az a jó, hogy az említett függvény beírja a létrehozandó új fájl nevét is.
Fájlok másolása egy másik könyvtárba
A fájlokat egy új könyvtárba másolhatja a shutil-ekkel másolat() funkció. Nézzük meg működés közben:
import osimport shutil
print ('Új könyvtár létrehozása.')
os.mkdir ('LinuxHint')
print ('Fájlok előtt:', os.listdir ('LinuxHint'))
shutil.másolat('./ Fájlok / szia.txt ',' LinuxHint ')
print ('Fájlok után:', os.listdir ('LinuxHint'))
Lássuk a parancs kimenetét:
Fájl másolása egy új könyvtárba
Vegye figyelembe, hogy amikor egy fájlt a másolat() funkció, A fájl engedélyeit is klónozzák de a fájl metaadatait nem másoljuk. Ez azt jelenti, hogy amikor ellenőrzi, hogy ez a fájl mikor készült, akkor az megmutatja a friss időt, amikor futtatta ezt a szkriptet.
Fájl másolása metaadatokkal
Az utolsó részben láttuk, hogyan készíthetünk másolatot a fájlból. Mi van, ha egy fájl pontos klónját akarja elkészíteni, amely magában foglalja a metaadatainak klónozását, például a fájl készítésekor stb. Ez is lehetséges, de ez lehet, hogy nem működik POSIX alapú rendszeren. Nézzünk meg egy példát arra, hogyan lehet ezt megtenni:
import osimport shutil
import idő
new_directory = 'LinuxHint'
src_file = './ Fájlok / szia.txt '
dest_file = './ LinuxHint / hello.txt '
def file_metadata (fájl):
stat_info = os.stat (fájl)
print ('Mode:', okt (stat_info.st_mode))
print ('Létrehozva:', idő.ctime (stat_info.st_ctime))
nyomtatás ('Hozzáférés:', idő.ctime (stat_info.st_atime))
nyomtatás ('Módosítva:', idő.ctime (stat_info.st_mtime))
os.mkdir (új_könyvtár)
print ('Forrásfájl metaadatai:')
file_metadata (src_file)
shutil.copy2 (src_fájl, új_könyvtár)
print ('Célfájl metaadatai:')
file_metadata (dest_file)
Íme, mit kapunk vissza ezzel a paranccsal, amikor ezt POSIX alapú rendszeren futtatjuk (a metaadatok nincsenek teljesen klónozva):
Fájl másolása metaadatokkal
A nem POSIX alapú rendszereken még a létrehozott és elérett idő is pontosan megfelelt volna.
A teljes könyvtár klónozása
Az utolsó részben láttuk, hogyan készíthetünk másolatot a fájlból. Itt meglátjuk, hogyan klónozhatunk egy komplett könyvtárat rekurzív módon. Ez azt jelenti, hogy ha egy másik könyvtár létezik a klónozni kívánt könyvtárban, azokat is klónozni fogjuk.
import pprintimport shutil
import os
src_directory = './ Fájlok
dest_directory = './ LinuxHint '
shutil.másolatfa (src_könyvtár, célkönyvtár)
nyomtatás ('A forrás tartalma:')
pprint.pprint (os.listdir (src_könyvtár))
nyomtatás ('A rendeltetési hely tartalma:')
pprint.pprint (os.listdir (cím_könyvtár))
Lássuk a parancs kimenetét:
Könyvtár másolása
Ne feledje, hogy a könyvtár, amelyet átadunk a copytree () -nek, a következőképpen működik a célkönyvtár nem létezhet a program futtatása előtt.
Könyvtár törlése
A könyvtár törlése nagyon egyszerű a rmtree () funkció a modulban. Lássuk itt ezt a funkciót működés közben:
import pprintimport shutil
import os
delete_directory = 'LinuxHint'
current_directory = '."
nyomtatás ('Tartalom eltávolítás előtt:')
pprint.pprint (os.listdir (jelenlegi_könyvtár))
shutil.rmtree (könyvtár törlése)
nyomtatás ('Tartalom eltávolítás után:')
pprint.pprint (os.listdir (jelenlegi_könyvtár))
A szkript futtatása után, LinuxHint könyvtár törlésre kerül a tartalommal együtt. Íme, amit ezzel a paranccsal kapunk vissza:
Könyvtár törlése
Fájlok keresése
Ha olyan fájlt szeretne találni, amely megtalálható a számítógép PATH változójában, használhatjuk a melyik() funkcióval megkeresheti a fájlt név szerint. Nézzünk meg egy bemutató példát ehhez a funkcióhoz:
import shutilnyomtatás (shutil.amely ('bsondump'))
nyomtatás (shutil.amely ("nincs fájl-talált"))
Íme, amit ezzel a paranccsal kapunk vissza:
Fájl keresése a PATH oldalon
Fájlrendszer tér figyelése
A shutil modullal rendelkezünk egy disk_usage () függvénnyel, amelyen keresztül információkat kaphatunk lemezünkről a gépünkről is. Nézzünk meg egy példát, amely ezeket az adatokat ember által olvasható módon mutatja:
import shutiltotal_b, used_b, free_b = shutil.lemez használat('.')
gb = 10 ** 9 # GB == gigabájt
nyomtatás ('Összesen: : 6.2f GB '.formátum (összesen_b / gb))
print ('Használt: : 6.2f GB '.formátum (használt_b / gb))
nyomtatás ('Ingyenes: : 6.2f GB '.formátum (szabad_b / gb))
Íme, amit ezzel a paranccsal kapunk vissza:
A fájlrendszer terének megkeresése
Könyvtárak archiválása
Utolsó példaként meglátjuk, hogyan archiválhatunk egy könyvtár slid modult make_archive () funkció. Nézzük meg a mintaprogramot:
import shutilimport os
archív_könyvtár = \
os.pálya.tágító (os.pálya.join ('cél-könyvtár-útvonal', 'linuxhint'))
root_dir = os.pálya.tágító (os.pálya.csatlakozzon ('~', '.ssh '))
shutil.make_archive (archív_könyvtár, 'gztar', root_dir)
Íme, amit ezzel a paranccsal kapunk vissza:
Könyvtár archiválása
Ha visszavonja a TAR fájl archiválását, és megnézi, akkor az az összes fájlt tartalmazza .ssh könyvtár fájlokat.
Következtetés
Ebben a leckében megvizsgáltuk, hogyan kezelhetjük a fájlobjektumokat magas szintű fájlműveletekkel egyszerűen shutil modul a Pythonban. Olyan műveletek, mint a fájl tartalmának másolása, a fájl új másolatának létrehozása stb. könnyűnek tűnt ezzel a modullal.