„Python“

„shutil“ modulis „Python“

„shutil“ modulis „Python“
Failų valdymas ir failų objektų tvarkymas laikomi viena kebliausių užduočių visomis programavimo kalbomis. Kai kurios programavimo kalbos suteikia mums keletą įrankių, kurie pašalina sudėtingas failų tvarkymo dalis su lengvai naudojamomis funkcijomis ir sąsajomis. Būtent tai yra „Python“ šliuzas modulis taip pat.

Python shutil

„Python shutil“ modulis leidžia kūrėjui labai lengvai naudoti failų objektus ir nesigilinant į tai, kaip viskas veikia po priedanga. Šis modulis iš esmės ištraukia žemo lygio failų objektų kūrimo ir valdymo semantiką, išvalo juos, kai tik bus baigtas, ir leidžia mums sutelkti dėmesį į programos verslo logiką. Čia pamatysime daug pavyzdžių, pradėkime.

Pavyzdžiai su Python shutil moduliu

Išnagrinėsime įvairius pavyzdžius, parodančius „Python“ naudojimą šliuzas modulį čia.

Failo kopijavimas

Su copyfile () funkcija šliuzas modulį, mes galime padaryti tikslią esamo failo kopiją bet kurioje mašinos vietoje. Pažvelkime į pavyzdinę programą, kad parodytume, kaip tai galima padaryti:

importuoti os
importuoti šleilą
file_directory = './ Failai '
spausdinti ('Failai prieš:', os.listdir (failo_katalogas))
šliuzas.copyfile ('./ Failai / labas.txt ','./ Failai / labas_ vėl.txt ')
spausdinti ('Failai po:', os.listdir (failo_katalogas))

Ką tik nukopijavome failą, esantį nurodytame kataloge, kad klonuotume failą tame pačiame kataloge. Štai ką mes grąžiname naudodami šią komandą:

„Python shutil“ failo kopija

Geras dalykas, susijęs su šia funkcija, yra tai, kad minėta funkcija taip pat nurodo naujo kuriamo failo pavadinimą.

Failų kopijavimas į kitą katalogą

Failą galima nukopijuoti į naują katalogą naudojant „shutil“ kopija () funkcija. Pažvelkime į tai:

importuoti os
importuoti šleilą
print ('Sukurti naują katalogą.„)
os.mkdir ('LinuxHint')
spausdinti ('Failai prieš:', os.listdir („LinuxHint“))
šliuzas.kopija ('./ Failai / labas.txt ',' LinuxHint ')
spausdinti ('Failai po:', os.listdir („LinuxHint“))

Pažiūrėkime šios komandos išvestį:

Kopijuojamas failas į naują katalogą

Atminkite, kad kai failas nukopijuojamas naudojant kopija () funkcija, taip pat klonuojami failo leidimai bet failo metaduomenys nekopijuojami. Tai reiškia, kad kai patikrinsite, kada buvo sukurtas šis failas, jis parodys naują laiką, kai paleidote šį scenarijų.

Failo kopijavimas naudojant metaduomenis

Paskutiniame skyriuje pamatėme, kaip galėtume padaryti failo kopiją. Ką daryti, jei norite sukurti tikslų failo kloną, kuris apima jo metaduomenų klonavimą, pvz., Kai failas buvo padarytas ir pan. Tai taip pat įmanoma, bet tai gali neveikti POSIX sistemoje. Pažvelkime į pavyzdį, kaip tai galima padaryti:

importuoti os
importuoti šleilą
importo laikas
new_directory = 'LinuxHint'
src_file = './ Failai / labas.txt '
dest_file = './ LinuxHint / labas.txt '
def failo_metaduomenys (failas):
stat_info = os.statistika (byla)
spausdinti ('Mode:', oct (stat_info.st_mode))
spausdinti ('Sukurta:', laikas.ctime (stat_info.st_ctime))
spausdinti ('Prieiga:', laikas.ctime (stat_info.st_atime))
spausdinti ('Modified:', laikas.ctime (stat_info.st_mtime))
os.mkdir (naujas_katalogas)
spausdinti ('Šaltinio failo metaduomenys:')
file_metadata (src_file)
šliuzas.copy2 (src_file, new_directory)
spausdinti ('Paskirties failo metaduomenys:')
file_metadata (dest_file)

Štai ką mes grąžiname naudodami šią komandą, kai tai vykdome POSIX sistemoje (metaduomenys nėra visiškai klonuojami):

Kopijuoti failą su metaduomenimis

Ne POSIX sistemose net sukurtas ir pasiektas laikas būtų tiksliai sutapęs.

Klonuojamas visas katalogas

Paskutiniame skyriuje matėme, kaip galėtume padaryti failo kopiją. Čia pamatysime, kaip rekursyviai galime klonuoti visą katalogą. Tai reiškia, kad jei kataloge, kurį norime klonuoti, yra kitas katalogas, jie taip pat bus klonuojami.

importo atspaudas
importuoti šleilą
importuoti os
src_directory = './ Failai '
paskirties_katalogas = './ „LinuxHint“
šliuzas.kopija medis (src_directory, dest_directory)
spausdinti ('Šaltinio turinys:')
pprint.pprint (os.listdir (src_directory))
spausdinti ('Paskirties turinys:')
pprint.pprint (os.listdir (adreso_katalogas))

Pažiūrėkime šios komandos išvestį:

Katalogo kopijavimas

Atkreipkite dėmesį, kad katalogas, kurį perduodame kopijai (), veikia kaip paskirties katalogas neturi būti prieš paleidžiant šią programą.

Katalogo trynimas

Katalogą ištrinti labai paprasta naudojant rmtree () funkcija modulyje. Pažiūrėkime, kaip ši funkcija veikia čia:

importo atspaudas
importuoti šleilą
importuoti os
delete_directory = 'LinuxHint'
dabartinis_katalogas = '."
spausdinti ('Turinys prieš pašalinimą:')
pprint.pprint (os.listdir (current_directory))
šliuzas.rmtree (ištrinti katalogą)
spausdinti ('Turinys po pašalinimo:')
pprint.pprint (os.listdir (current_directory))

Paleidus scenarijų, „LinuxHint“ katalogas ištrinamas kartu su turiniu. Štai ką mes grąžiname naudodami šią komandą:

Ištrinti katalogą

Failų paieška

Jei norite rasti failą, esantį jūsų kompiuteryje esančiame kintamajame PATH, galime naudoti kuri () funkcija rasti tą failą pagal pavadinimą. Pažvelkime į šios funkcijos demonstracinį pavyzdį:

importuoti šleilą
spausdinti (shutil.kuris („bsondump“))
spausdinti (shutil.kuri („nerasta bylos“))

Štai ką mes grąžiname naudodami šią komandą:

Raskite failą PATH

Failų sistemos erdvės stebėjimas

Naudodami „shutil“ modulį, turime funkciją disk_usage (), per kurią taip pat galime gauti vietos diske informaciją apie savo mašiną. Pažvelkime į pavyzdį, kuriame šie duomenys rodomi žmonėms suprantamu būdu:

importuoti šleilą
total_b, used_b, free_b = shutil.disk_usage ('.„)
gb = 10 ** 9 # GB == gigabaitas
spausdinti ('Iš viso: : 6.2f GB '.formatas (viso_b / gb))
spausdinti ('Naudota: : 6.2f GB '.formatas (naudojamas_b / gb))
spausdinti ('Nemokama: : 6.2f GB '.formatas (laisvas_b / gb))

Štai ką mes grąžiname naudodami šią komandą:

Failų sistemos vietos paieška

Katalogų archyvavimas

Kaip paskutinį pavyzdį pamatysime, kaip galime archyvuoti katalogo „shutil“ modulį make_archive () funkcija. Pažvelkime į pavyzdinę programą:

importuoti šleilą
importuoti os
archyvo_katalogas = \
os.kelias.plėtiklis (os.kelias.prisijungti ('paskirties katalogo kelias', 'linuxhint'))
root_dir = os.kelias.plėtiklis (os.kelias.prisijungti ('~', '.ssh '))
šliuzas.make_archive (archyvo katalogas, 'gztar', root_dir)

Štai ką mes grąžiname naudodami šią komandą:

Archyvavimo katalogas

Jei išarchyvuosite TAR failą ir pažvelgsite, jame bus visas .ssh katalogo failus jame.

Išvada

Šioje pamokoje apžvelgėme, kaip lengvai valdome failų objektus naudodami aukšto lygio failų operacijas šliuzas modulis „Python“. Tokios operacijos kaip failo turinio kopijavimas, naujos failo kopijos kūrimas ir kt. atrodė lengvai naudojant šį modulį.

„Battle for Wesnoth“ pamoka
„Battle for Wesnoth“ yra vienas populiariausių atvirojo kodo strateginių žaidimų, kurį šiuo metu galite žaisti. Šis žaidimas ne tik buvo kuriamas laba...
0 A.D. Pamoka
Iš daugybės strateginių žaidimų 0 A.D. sugeba išsiskirti kaip išsamus pavadinimas ir labai gilus, taktinis žaidimas, nepaisant to, kad yra atviro kodo...
„Unity3D“ pamoka
Įvadas į „Unity 3D“ „Unity 3D“ yra galingas žaidimų kūrimo variklis. Tai yra daugiašalė platforma, kuri leidžia kurti žaidimus mobiliesiems, interneti...