Python shutil
Python shutil modul omogućava programeru da vrlo jednostavno koristi datoteke, bez dubljih detalja o tome kako stvari funkcioniraju ispod pokrivača. Ovaj modul u osnovi apstrahira semantiku niske razine stvaranja i upravljanja objektima datoteka, čisteći ih nakon što završi i omogućuje nam da se usredotočimo na poslovnu logiku aplikacije. Ovdje ćemo vidjeti mnogo primjera, krenimo.
Primjeri s Python shutil modulom
Proučit ćemo razne primjere koji pokazuju upotrebu Pythona šutil modul ovdje.
Kopiranje datoteke
Uz copyfile () funkcioniraju u šutil modula, možemo napraviti točnu kopiju postojeće datoteke bilo gdje na stroju. Pogledajmo primjer programa koji će pokazati kako se to može učiniti:
uvoz osuvoz shutil
file_directory = './ Datoteke '
print ('Datoteke prije:', os.listdir (imenik_datoteke))
šutil.copyfile ('./ Datoteke / zdravo.txt ','./ Files / hello_again.txt ')
print ('Datoteke nakon:', os.listdir (imenik_datoteke))
Upravo smo kopirali datoteku koja postoji u danom direktorijumu da bismo klonirali datoteku u istom direktoriju. Evo što vraćamo ovom naredbom:
Kopija datoteke Python shutil
Dobra stvar ove funkcije je što spomenuta funkcija uzima kao ulaz i naziv nove datoteke koju treba stvoriti.
Kopiranje datoteka u drugi direktorij
Moguće je kopirati datoteku u novi direktorij pomoću shutil-a kopirati() funkcija. Pogledajmo to na djelu:
uvoz osuvoz shutil
print ('Izrada novog direktorija.')
os.mkdir ('LinuxHint')
print ('Datoteke prije:', os.listdir ('LinuxHint'))
šutil.kopirati('./ Datoteke / zdravo.txt ',' LinuxHint ')
print ('Datoteke nakon:', os.listdir ('LinuxHint'))
Pogledajmo izlaz za ovu naredbu:
Kopiranje datoteke u novi direktorij
Imajte na umu da kada se datoteka kopira pomoću kopirati() funkcija, dopuštenja za datoteku su također klonirana ali metapodaci datoteke se ne kopiraju. To znači da kada provjerite kada je izrađena ova datoteka, prikazat će se novo vrijeme kada ste pokrenuli ovu skriptu.
Kopiranje datoteke s metapodacima
U posljednjem smo odjeljku vidjeli kako možemo napraviti kopiju datoteke. Što ako želite napraviti točan klon datoteke koji uključuje kloniranje njezinih metapodataka, kao i kada je datoteka izrađena itd. I ovo je moguće, ali ovo možda neće raditi na POSIX sustavu. Pogledajmo primjer kako se to može učiniti:
uvoz osuvoz shutil
vrijeme 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 ('Stvoreno:', vrijeme.ctime (stat_info.st_ctime))
print ('Pristupljeno:', vrijeme.ctime (stat_info.st_atime))
print ('Izmijenjeno:', vrijeme.ctime (stat_info.st_mtime))
os.mkdir (novi_direktorij)
print ('Metapodaci za izvornu datoteku:')
datoteka_metadata (src_file)
šutil.copy2 (src_file, novi_direktorij)
print ('Metapodaci za odredišnu datoteku:')
datoteka_metadata (dest_file)
Evo što dobivamo s ovom naredbom kada je pokrenemo na sustavu temeljenom na POSIX-u (metapodaci nisu klonirani u potpunosti):
Kopiraj datoteku s metapodacima
Na sustavima koji se ne temelje na POSIX-u, čak bi se i stvoreno vrijeme kojem se pristupilo točno pristupilo.
Kloniranje kompletnog direktorija
U posljednjem smo odjeljku vidjeli kako možemo kopirati datoteku. Ovdje ćemo vidjeti kako možemo rekurzivno klonirati kompletnu mapu. To znači da će, ako postoji drugi direktorij u direktoriju koji želimo klonirati, i oni biti klonirani.
uvozni otisakuvoz shutil
uvoz os
src_directory = './ Datoteke '
dest_directory = './ LinuxHint '
šutil.copytree (src_directory, dest_directory)
print ('Sadržaj izvora:')
otisak.otisak (os.listdir (src_directory))
print ('Sadržaj odredišta:')
otisak.otisak (os.listdir (dest_directory))
Pogledajmo izlaz za ovu naredbu:
Dupliciranje direktorija
Imajte na umu da direktorij koji prosljeđujemo copytree () funkcionira kao odredišni direktorij ne smije postojati prije pokretanja ovog programa.
Brisanje direktorija
Brisanje direktorija vrlo je jednostavno pomoću rmtree () funkcija u modulu. Pogledajmo ovdje ovu funkciju na djelu:
uvozni otisakuvoz shutil
uvoz os
delete_directory = 'LinuxHint'
trenutni_direktorij = '.'
print ('Sadržaj prije uklanjanja:')
otisak.otisak (os.listdir (trenutni_direktorij))
šutil.rmtree (imenik_izbriši)
print ('Sadržaj nakon uklanjanja:')
otisak.otisak (os.listdir (trenutni_direktorij))
Nakon pokretanja skripte, LinuxHint direktorij se briše zajedno sa sadržajem. Evo što vraćamo ovom naredbom:
Izbriši direktorij
Traženje datoteka
Ako želite pronaći datoteku koja je prisutna na varijabli PATH na vašem računalu, možemo koristiti koji() funkcija za pronalaženje te datoteke po imenu. Pogledajmo demonstracijski primjer ove funkcije:
uvoz shutilispis (shutil.koji ('bsondump'))
ispis (shutil.koji ('nije pronađena datoteka'))
Evo što vraćamo ovom naredbom:
Pronađi datoteku na PATH
Praćenje prostora datotečnog sustava
S modulom shutil imamo funkciju disk_usage () putem koje možemo dobiti i podatke o prostoru na disku o našem stroju. Pogledajmo primjer koji prikazuje ove podatke na čitljiv način:
uvoz shutiltotal_b, used_b, free_b = shutil.disk_usage ('.')
gb = 10 ** 9 # GB == gigabajta
print ('Ukupno: : 6.2f GB '.format (ukupno_b / gb))
print ('Korišteno: : 6.2f GB '.format (koristi se_b / gb))
print ('Besplatno: : 6.2f GB '.format (free_b / gb))
Evo što vraćamo ovom naredbom:
Pronalaženje prostora datotečnog sustava
Arhiviranje direktorija
Kao posljednji primjer, vidjet ćemo kako možemo arhivirati modul direktorija shutil make_archive () funkcija. Pogledajmo primjer programa:
uvoz shutiluvoz os
directory_directory = \
os.staza.proširi korisnik (os.staza.pridruži se ('odredište-direktorij-put', 'linuxhint'))
root_dir = os.staza.proširi korisnik (os.staza.pridruži se ('~', '.ssh '))
šutil.make_archive (directory_directory, 'gztar', root_dir)
Evo što vraćamo ovom naredbom:
Arhiviranje direktorija
Ako arhivirate TAR datoteku i pogledate je, sadržavat će sve datoteke .ssh datoteke direktorija u njemu.
Zaključak
U ovoj smo lekciji pogledali kako objektima datoteka pomoću operacija datoteka na visokoj razini možemo lako upravljati šutil modul u Pythonu. Operacije poput kopiranja sadržaja datoteke, izrade nove kopije datoteke itd. izgledalo lako s ovim modulom.