Python shutil
Python shutil modul omogoča razvijalcu uporabo datotečnih predmetov zelo enostavno in brez podrobnejših podrobnosti o tem, kako stvari delujejo pod platnicami. Ta modul v bistvu odvzame semantiko nizke ravni ustvarjanja in upravljanja datotečnih predmetov, jih po končani uporabi očisti in nam omogoča, da se osredotočimo na poslovno logiko aplikacije. Tu bomo videli veliko primerov, začnimo.
Primeri z Python shutil modulom
Proučevali bomo različne primere, ki dokazujejo uporabo Pythona shutil modul tukaj.
Kopiranje datoteke
Z copyfile () funkcijo v shutil modul, lahko naredimo natančno kopijo obstoječe datoteke kjer koli v računalniku. Oglejmo si vzorčni program, ki bo prikazal, kako je to mogoče storiti:
uvoz osuvoz shutil
file_directory = './ Datoteke '
print ('Datoteke pred:', os.listdir (imenik_datoteke))
shutil.copyfile ('./ Datoteke / zdravo.txt ','./ Files / hello_again.txt ')
print ('Datoteke po:', os.listdir (imenik_datoteke))
Pravkar smo kopirali datoteko, ki obstaja v danem imeniku, da jo kloniramo v isti imenik. Tukaj dobimo s tem ukazom:
Kopija datoteke Python shutil
Dobra stvar te funkcije je, da omenjena funkcija za vnos vzame tudi ime nove datoteke, ki jo želite ustvariti.
Kopiranje datotek v drug imenik
Datoteko je mogoče kopirati v nov imenik s shutilovimi kopirati() funkcijo. Poglejmo si to v akciji:
uvoz osuvoz shutil
print ('Izdelava novega imenika.')
os.mkdir ('LinuxHint')
print ('Datoteke pred:', os.listdir ('LinuxHint'))
shutil.kopirati('./ Files / zdravo.txt ',' LinuxHint ')
print ('Datoteke po:', os.listdir ('LinuxHint'))
Poglejmo izhod za ta ukaz:
Kopiranje datoteke v nov imenik
Upoštevajte, da se pri kopiranju datoteke z kopirati() funkcijo, klonirana so tudi dovoljenja za datoteko vendar se metapodatki datoteke ne kopirajo. To pomeni, da ko preverite, kdaj je bila ta datoteka narejena, bo prikazan svež čas, ko ste zagnali ta skript.
Kopiranje datoteke z metapodatki
V zadnjem poglavju smo videli, kako lahko naredimo kopijo datoteke. Kaj pa, če želite narediti natančen klon datoteke, ki vključuje kloniranje njenih metapodatkov, na primer, kdaj je bila datoteka izdelana itd. Tudi to je mogoče, ampak to morda ne bo delovala v sistemu, ki temelji na POSIX. Oglejmo si primer, kako je to mogoče storiti:
uvoz osuvoz shutil
čas uvoza
new_directory = 'LinuxHint'
src_file = './ Datoteke / zdravo.txt '
dest_file = './ LinuxHint / zdravo.txt '
def file_metadata (datoteka):
stat_info = os.stat (datoteka)
print ('Način:', okt (stat_info.st_mode))
print ('Ustvarjeno:', čas.ctime (stat_info.st_ctime))
print ('Dostopno:', čas.ctime (stat_info.st_atime))
print ('Spremenjeno:', čas.ctime (stat_info.st_mtime))
os.mkdir (nov_imenik)
print ('Metapodatki za izvorno datoteko:')
datoteka_metadata (datoteka src_file)
shutil.copy2 (src_file, new_directory)
print ('Metapodatki za ciljno datoteko:')
datoteka_metadata (dest_file)
Tukaj dobimo s tem ukazom, ko ga zaženemo v sistemu, ki temelji na POSIX (metapodatki niso klonirani v celoti):
Kopiraj datoteko z metapodatki
V sistemih, ki ne temeljijo na POSIX, bi se celo ustvarjeni in dostopni čas natančno ujemal.
Kloniranje celotnega imenika
V zadnjem poglavju smo videli, kako lahko naredimo kopijo datoteke. Tu bomo videli, kako lahko rekurzivno kloniramo celoten imenik. To pomeni, da če bo v imeniku, ki ga želimo klonirati, obstajati še en imenik, bodo tudi ti klonirani.
uvozni odtisuvoz shutil
uvoz os
src_directory = './ Datoteke '
dest_directory = './ LinuxHint '
shutil.copytree (src_directory, dest_directory)
print ('Vsebina vira:')
odtis.odtis (os.listdir (src_directory))
print ('Vsebina cilja:')
odtis.odtis (os.listdir (dest_directory))
Poglejmo izhod za ta ukaz:
Podvajanje imenika
Imenik, ki ga posredujemo copytree (), deluje kot ciljni imenik ne sme obstajati, preden zaženemo ta program.
Brisanje imenika
Brisanje imenika je zelo preprosto s rmtree () funkcijo v modulu. Poglejmo to funkcijo tukaj:
uvozni odtisuvoz shutil
uvoz os
delete_directory = 'LinuxHint'
trenutni_direktor = '."
print ('Vsebina pred odstranitvijo:')
odtis.odtis (os.listdir (trenutni_direktorij))
shutil.rmtree (imenik_izbrisov)
print ('Vsebina po odstranitvi:')
odtis.odtis (os.listdir (trenutni_direktorij))
Po zagonu skripta, LinuxHint imenik se izbriše skupaj z vsebino. Tukaj dobimo s tem ukazom:
Izbriši imenik
Iskanje datotek
Če želite poiskati datoteko, ki je na vašem računalniku prisotna v spremenljivki PATH, lahko uporabimo datoteko ki () funkcija za iskanje te datoteke po imenu. Oglejmo si predstavitveni primer te funkcije:
uvoz shutiltiskanje (shutil.which ('bsondump'))
tiskanje (shutil.which ('no-file-found'))
Tukaj dobimo s tem ukazom:
Poiščite datoteko na PATH
Nadzor prostora datotečnega sistema
Z modulom shutil imamo funkcijo disk_usage (), s pomočjo katere lahko dobimo tudi podatke o prostoru na disku o naši napravi. Oglejmo si primer, ki prikazuje te podatke na berljiv način:
uvoz shutiltotal_b, used_b, free_b = shutil.disk_usage ('.')
gb = 10 ** 9 # GB == gigabajt
print ('Skupaj: : 6.2f GB '.format (skupaj_b / gb))
print ('Uporabljeno: : 6.2f GB '.format (uporabljen_b / gb))
print ('Brezplačno: : 6.2f GB '.format (brezplačno_b / gb))
Tukaj dobimo s tem ukazom:
Iskanje prostora datotečnega sistema
Arhiviranje imenikov
Kot zadnji primer bomo videli, kako lahko arhiviramo imeniški shutil modul make_archive () funkcijo. Oglejmo si vzorčni program:
uvoz shutiluvoz os
archive_directory = \
os.pot.expanduser (os.pot.pridruži se ('cilj-imenik-pot', 'linuxhint'))
root_dir = os.pot.expanduser (os.pot.pridruži se ('~', '.ssh '))
shutil.make_archive (archive_directory, 'gztar', root_dir)
Tukaj dobimo s tem ukazom:
Arhiviranje imenika
Če arhivirate datoteko TAR in si jo ogledate, bo vsebovala vse datoteke .ssh imeniške datoteke v njem.
Zaključek
V tej lekciji smo preučili, kako lahko enostavno upravljamo datotečne predmete z datotečnimi operacijami na visoki ravni shutil modul v Pythonu. Operacije, kot so kopiranje vsebine datoteke, ustvarjanje nove kopije datoteke itd. izgledalo enostavno s tem modulom.