Python

modul shutil v Pythonu

modul shutil v Pythonu
Upravljanje datotek in ravnanje z njimi veljajo za eno najzahtevnejših nalog v vseh programskih jezikih. Nekateri programski jeziki nam nudijo nekaj orodij, ki težke dele obdelave datotek abstrahirajo z enostavnimi funkcijami in vmesniki. Prav to je tisto, kar ima Python shutil modul tudi.

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 os
uvoz 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 os
uvoz 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 os
uvoz 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 odtis
uvoz 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 odtis
uvoz 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 shutil
tiskanje (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 shutil
total_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 shutil
uvoz 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.

Bitka za Wesnoth 1.13.6 Razvoj izdan
Bitka za Wesnoth 1.13.6, ki je izšel prejšnji mesec, je šesta razvojna izdaja v 1.13.x series in prinaša številne izboljšave, predvsem uporabniški vme...
Kako namestiti League Of Legends na Ubuntu 14.04
Če ste ljubitelj League of Legends, je to priložnost, da preizkusite League of Legends. Upoštevajte, da LOL podpira PlayOnLinux, če uporabljate Linux....
Namestite najnovejšo strategijo igre OpenRA v Ubuntu Linux
OpenRA je Libre / Free Real Time strateški stroj, ki poustvarja zgodnje igre Westwood, kot je klasična Command & Conquer: Red Alert. Porazdeljeni modi...