Shutil -modulen i Python

Shutil -modulen i Python
Filadministrasjon og håndtering av filobjekter anses å være en av de mest vanskelige oppgavene i alle programmeringsspråk. Noen programmeringsspråk gir oss noen verktøy som abstrakte bort de vanskelige delene av filhåndtering med brukervennlige funksjoner og grensesnitt. Dette er nøyaktig hva Pythons Shutil Modulen gjør det også.

Python Shutil

Python Shutil -modul lar en utvikler bruke filobjekter veldig enkelt og uten å gå i dypere detaljer om hvordan ting fungerer under dekslene. Denne modulen abstraherer i utgangspunktet bort semantikken på lavt nivå ved å lage og administrere filobjekter, rengjøre dem når det er fullført og lar oss fokusere på forretningslogikken i applikasjonen. Vi vil se mange eksempler her, la oss komme i gang.

Eksempler med Python Shutil -modul

Vi vil studere forskjellige eksempler som viser bruken av pyton Shutil modul her.

Kopiere en fil

Med Kopier fil() funksjon i Shutil Modul, vi kan lage en eksakt kopi av en eksisterende fil hvor som helst på maskinen. La oss se på et eksempelprogram for å demonstrere hvordan dette kan gjøres:

Importer OS
Import stengt
file_directory = './Filer '
skriv ut ('filer før:', OS.listdir (file_directory))
Shutil.Kopier fil('./Filer/Hei.tekst', './Filer/Hello_Again.tekst')
skriv ut ('filer etter:', OS.listdir (file_directory))

Vi har nettopp kopiert en fil som finnes i den gitte katalogen for å klone filen i samme katalog. Dette er hva vi kommer tilbake med denne kommandoen:

Python stengilfilkopi

Det gode med denne funksjonen er at den nevnte funksjonen også tar inn navnet til den nye filen som skal opprettes.

Kopiere filer til en annen katalog

Det er mulig å kopiere en fil til en ny katalog med Shutil kopiere() funksjon. La oss se på det i aksjon:

Importer OS
Import stengt
trykk ('Å lage en ny katalog.')
OS.mkdir ('linuxhint')
skriv ut ('filer før:', OS.ListDir ('Linuxhint'))
Shutil.kopiere('./Filer/Hei.txt ',' Linuxhint ')
skriv ut ('filer etter:', OS.ListDir ('Linuxhint'))

La oss se utdataene for denne kommandoen:

Kopiering av fil til en ny katalog

Merk at når en fil kopieres ved hjelp av kopiere() funksjon, Tillatelser for filen er også klonet Men metadata av filen er ikke kopiert. Dette betyr at når du sjekker når denne filen ble laget, vil den vise den ferske tiden da du kjørte dette skriptet.

Kopiering av fil med metadata

I den siste delen så vi hvordan vi kunne lage en kopi av filen. Hva om du vil lage en eksakt klone av en fil som innebærer kloning av metadataene, så vel som når filen ble laget osv. Dette er også mulig, men dette kan ikke fungere på et POSIX -basert system. La oss se på et eksempel på hvordan dette kan gjøres:

Importer OS
Import stengt
Importer tid
new_directory = 'linuxhint'
src_file = './Filer/Hei.tekst'
dest_file = './Linuxhint/hei.tekst'
def file_metadata (fil):
stat_info = OS.Stat (fil)
trykk ('modus:', okt (stat_info.st_mode))
trykk ('opprettet:', tid.CTIME (Stat_Info.st_ctime))
trykk ('åpnet:', tid.CTIME (Stat_Info.st_atime))
trykk ('Modifisert:', tid.CTIME (Stat_Info.st_mtime))
OS.mkdir (new_directory)
skriv ut ('metadata for kildefil:')
file_metadata (src_file)
Shutil.copy2 (src_file, new_directory)
skriv ut ('metadata for destinasjonsfil:')
file_metadata (dest_file)

Dette er hva vi kommer tilbake med denne kommandoen når vi kjører dette på et POSIX -basert system (metadata er ikke klonet fullstendig):

Kopier fil med metadata

På ikke-Posix-baserte systemer ville til og med den opprettet og tilgang til tiden ha matchet nøyaktig.

Kloning av komplett katalog

I siste avsnitt så vi hvordan vi kunne lage en kopi av filen. Her vil vi se hvordan vi kan klone en komplett katalog rekursivt. Dette betyr at hvis en annen katalog eksisterer i katalogen vi vil klone, vil de også bli klonet.

Importer pprint
Import stengt
Importer OS
src_directory = './Filer '
dest_directory = './Linuxhint '
Shutil.CopyTree (SRC_DIRECTORY, DEST_DIRECTORY)
trykk ('Innhold av kilde:')
Pprint.Pprint (OS.listdir (src_directory))
trykk ('Innholdet i destinasjonen:')
Pprint.Pprint (OS.listDir (dest_directory))

La oss se utdataene for denne kommandoen:

Dupliserer en katalog

Legg merke til at katalogen vi sender til CopyTree () -funksjonen som Destinasjonskatalog må ikke eksistere før vi kjører dette programmet.

Slette en katalog

Å slette en katalog er veldig enkel med rmtree () funksjon i modulen. La oss se denne funksjonen i aksjon her:

Importer pprint
Import stengt
Importer OS
delete_directory = 'linuxhint'
current_directory = '.'
Skriv ut ('Innhold før fjerning:')
Pprint.Pprint (OS.listdir (current_directory))
Shutil.RMTree (Delete_Directory)
trykk ('Innhold etter fjerning:')
Pprint.Pprint (OS.listdir (current_directory))

Etter å ha kjørt skriptet, Linuxhint Katalogen blir slettet sammen med innholdet. Dette er hva vi kommer tilbake med denne kommandoen:

Slett katalog

Finne filer

Hvis du vil finne en fil som er til stede på banevariabelen på maskinen din, kan vi bruke hvilken() Funksjon for å finne den filen etter navn. La oss se på et demonstrasjonseksempel for denne funksjonen:

Import stengt
trykk (stengt.som ('bsondump'))
trykk (stengt.som ('No-File-Found'))

Dette er hva vi kommer tilbake med denne kommandoen:

Finn fil på banen

Overvåking av filsystemplass

Med Shutil -modulen har vi en funksjon Disk_usage () som vi også kan få informasjon om diskplass om maskinen vår. La oss se på et eksempel som viser disse dataene på en menneskelig lesbar måte:

Import stengt
Total_B, brukt_B, Free_B = Shutil.Diskbruk('.')
GB = 10 ** 9 # GB == Gigabyte
trykk ('Totalt: : 6.2f gb '.Format (Total_B / GB))
trykk ('brukt: : 6.2f gb '.Format (brukt_B / GB))
trykk ('gratis: : 6.2f gb '.Format (Free_B / GB))

Dette er hva vi kommer tilbake med denne kommandoen:

Finne filsystemplass

Arkiveringskataloger

Som et siste eksempel vil vi se hvordan vi kan arkivere en katalog -stengemodul make_archive () funksjon. La oss se på prøveprogrammet:

Import stengt
Importer OS
archive_directory = \
OS.sti.ExpandUser (OS.sti.Bli med ('Destinasjonsd-katalog-path', 'Linuxhint'))
root_dir = os.sti.ExpandUser (OS.sti.Bli med ('~', '.ssh '))
Shutil.make_archive (archive_directory, 'gztar', root_dir)

Dette er hva vi kommer tilbake med denne kommandoen:

Arkiveringskatalog

Hvis du fjerner tjærefilen og ser på, vil den inneholde alt .ssh Katalogfiler i den.

Konklusjon

I denne leksjonen så vi på hvordan vi lett kan administrere filobjekter med filoperasjoner på høyt nivå med Shutil Modul i Python. Operasjoner som kopiering av innholdet i en fil, oppretter en ny kopi av en fil osv. så lett ut med denne modulen.