Python

shutil-modul i Python

shutil-modul i Python
Filhåndtering og håndtering av filobjekter anses å være en av de vanskeligste oppgavene i alle programmeringsspråk. Noen programmeringsspråk gir oss noen verktøy som trekker vekk de vanskelige delene av filhåndtering med brukervennlige funksjoner og grensesnitt. Dette er nøyaktig hva Python har shutil modulen gjør det også.

Python shutil

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

Eksempler med Python shutil-modul

Vi vil studere forskjellige eksempler som demonstrerer bruken av Python shutil modul her.

Kopiere en fil

Med Kopier fil() funksjon i shutil modul, kan vi 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
importere shutil
file_directory = './ Filer '
skriv ut ('Files before:', os.listdir (filkatalog))
shutil.Kopier fil('./ Filer / hei.tekst', './ Filer / hallo igjen.tekst')
skriv ut ('Files after:', os.listdir (filkatalog))

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

Python shutil-filkopi

Det som er bra med denne funksjonen er at den nevnte funksjonen også tar navnet på den nye filen som skal opprettes som inndata.

Kopiere filer til en annen katalog

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

importer os
importere shutil
print ('Lage en ny katalog.')
os.mkdir ('LinuxHint')
skriv ut ('Files before:', os.listdir ('LinuxHint'))
shutil.kopiere('./ Filer / hei.txt ',' LinuxHint ')
skriv ut ('Files after:', os.listdir ('LinuxHint'))

La oss se utdataene for denne kommandoen:

Kopierer filen til en ny katalog

Merk at når en fil kopieres med kopiere() funksjon, tillatelser for filen er også klonet men metadata for filen kopieres ikke. 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.

Kopierer fil med metadata

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

importer os
importere shutil
importtid
new_directory = 'LinuxHint'
src_file = './ Filer / hei.tekst'
dest_file = './ LinuxHint / hei.tekst'
def file_metadata (fil):
stat_info = os.stat (fil)
skriv ut ('Mode:', okt (stat_info.st_mode))
print ('Laget:', tid.ctime (stat_info.st_ctime))
print ('Accessed:', tid.ctime (stat_info.st_atime))
print ('Modified:', tid.ctime (stat_info.st_mtime))
os.mkdir (ny_katalog)
skriv ut ('Metadata for kildefilen:')
file_metadata (src_file)
shutil.copy2 (src_file, new_directory)
skriv ut ('Metadata for destinasjonsfil:')
file_metadata (dest_file)

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

Kopier fil med metadata

På ikke-POSIX-baserte systemer ville til og med opprettet og tilgjengelig tid ha matchet nøyaktig.

Kloning av fullstendig katalog

I den siste delen 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 det finnes en annen katalog i katalogen vi vil klone, vil de også bli klonet.

importer pprint
importere shutil
importer os
src_directory = './ Filer '
dest_directory = './ LinuxHint '
shutil.copytree (src_directory, dest_directory)
print ('Innhold av kilde:')
pprint.pprint (os.listdir (src_directory))
print ('Destinasjonsinnhold:')
pprint.pprint (os.listdir (dest_directory))

La oss se utdataene for denne kommandoen:

Kopiere en katalog

Merk at katalogen vi sender til copytree () fungerer som målkatalogen må ikke eksistere før vi kjører dette programmet.

Slette en katalog

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

importer pprint
importere shutil
importer os
delete_directory = 'LinuxHint'
current_directory = '.'
print ('Innhold før fjerning:')
pprint.pprint (os.listdir (nåværende katalog)
shutil.rmtree (delete_directory)
print ('Innhold etter fjerning:')
pprint.pprint (os.listdir (nåværende katalog))

Etter å ha kjørt skriptet, LinuxHint katalogen slettes sammen med innholdet. Her er hva vi kommer tilbake med denne kommandoen:

Slett katalog

Finne filer

Hvis du vil finne en fil som er tilstede på PATH-variabelen på maskinen din, kan vi bruke hvilken() funksjon for å finne den filen etter navn. La oss se på et demonstrasjonseksempel for denne funksjonen:

importere shutil
utskrift (shutil.som ('bsondump'))
utskrift (shutil.som ('no-file-found'))

Her er hva vi kommer tilbake med denne kommandoen:

Finn filen på PATH

Overvåking av filsystemområdet

Med shutil-modulen har vi en funksjon disk_usage () der vi også kan få diskplassinformasjon om maskinen vår. La oss se på et eksempel som viser disse dataene på en lesbar måte:

importere shutil
total_b, used_b, free_b = shutil.Diskbruk('.')
gb = 10 ** 9 # GB == gigabyte
print ('Totalt: : 6.2f GB '.format (total_b / gb))
print ('Brukt: : 6.2f GB '.format (brukt_b / gb))
print ('Gratis: : 6.2f GB '.format (free_b / gb))

Her er hva vi kommer tilbake med denne kommandoen:

Finne filsystemplass

Arkiveringskataloger

Som et siste eksempel vil vi se hvordan vi kan arkivere en katalog shutil-modul make_archive () funksjon. La oss se på eksempelprogrammet:

importere shutil
importer os
archive_directory = \
os.sti.utvidelsesbruker (os.sti.bli med ('destinasjonskatalog-bane', 'linuxhint'))
root_dir = os.sti.utvidelsesbruker (os.sti.bli med ('~', '.ssh '))
shutil.make_archive (archive_directory, 'gztar', root_dir)

Her er hva vi kommer tilbake med denne kommandoen:

Arkiveringskatalog

Hvis du tar arkiveringen av TAR-filen og ser, vil den inneholde alle .ssh katalogfiler i den.

Konklusjon

I denne leksjonen så vi på hvordan vi enkelt kan administrere filobjekter med filoperasjoner på høyt nivå shutil modul i Python. Operasjoner som å kopiere innholdet i en fil, opprette en ny kopi av en fil osv. så enkelt ut med denne modulen.

HD Remastered Games for Linux som aldri hadde en Linux-utgave tidligere
Mange spillutviklere og utgivere kommer med HD-remaster av gamle spill for å forlenge franchisetiden, vennligst fans som ber om kompatibilitet med mod...
Hvordan bruke AutoKey til å automatisere Linux-spill
AutoKey er et desktopautomatiseringsverktøy for Linux og X11, programmert i Python 3, GTK og Qt. Ved å bruke skript og MACRO-funksjonalitet kan du aut...
Hvordan vise FPS-teller i Linux-spill
Linux-spill fikk et stort press da Valve kunngjorde Linux-støtte for Steam-klient og spillene deres i 2012. Siden den gang har mange AAA- og indiespil...