Piton

modul shutil u Pythonu

modul shutil u Pythonu
Upravljanje datotekama i rukovanje objektima datoteka smatraju se jednim od najtežih zadataka u svim programskim jezicima. Neki programski jezici nude nam neke alate koji apstrahiraju teške dijelove rukovanja datotekama jednostavnim funkcijama i sučeljima. To je upravo ono što ima Python šutil modul također.

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 os
uvoz 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 os
uvoz 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 os
uvoz 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 otisak
uvoz 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 otisak
uvoz 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 shutil
ispis (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 shutil
total_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 shutil
uvoz 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.

Vodič za bitku za Wesnoth
Bitka za Wesnoth jedna je od najpopularnijih strateških igara otvorenog koda koje trenutno možete igrati. Ne samo da se ova igra razvija već jako dugo...
0 A.D. Vodič
Od mnogih strateških igara tamo, 0 A.D. uspijeva se istaknuti kao sveobuhvatan naslov i vrlo duboka, taktička igra unatoč tome što je otvoren izvor. R...
Vodič za Unity3D
Uvod u Unity 3D Unity 3D moćan je motor za razvoj igara. Cross platforma je to što vam omogućuje stvaranje igara za mobilne uređaje, web, stolne račun...