Python shutil
Python shutil-modul giver en udvikler mulighed for at bruge filobjekter meget let og uden at gå i dybere detaljer om, hvordan ting fungerer under coveret. Dette modul abstraherer dybest set semantikken på lavt niveau ved oprettelse og styring af filobjekter, rengøring af dem, når brugen er færdig, og giver os mulighed for at fokusere på applikationens forretningslogik. Vi vil se mange eksempler her, lad os komme i gang.
Eksempler med Python shutil-modul
Vi vil studere forskellige eksempler, der demonstrerer brugen af Python shutil modul her.
Kopiering af en fil
Med kopifil () funktion i shutil modul, kan vi lave en nøjagtig kopi af en eksisterende fil hvor som helst på maskinen. Lad os se på et eksempelprogram for at demonstrere, hvordan dette kan gøres:
importer osimportere shutil
file_directory = './ Filer '
udskrive ('Files before:', os.listdir (fil_katalog))
shutil.kopifil ('./ Filer / hej.txt ','./ Filer / hej igen.txt ')
udskrive ('Filer efter:', os.listdir (fil_katalog))
Vi kopierede lige en fil, der findes i det givne bibliotek for at klone filen i den samme mappe. Her er hvad vi kommer tilbage med denne kommando:
Kopi af Python shutil-fil
Det gode ved denne funktion er, at den nævnte funktion også tager navnet på den nye fil, der skal oprettes, som input.
Kopiering af filer til et andet bibliotek
Det er muligt at kopiere en fil til en ny mappe med shutils kopi() fungere. Lad os se på det i aktion:
importer osimportere shutil
print ('Oprettelse af en ny mappe.')
os.mkdir ('LinuxHint')
udskrive ('Files before:', os.listdir ('LinuxHint'))
shutil.kopi('./ Filer / hej.txt ',' LinuxHint ')
udskrive ('Filer efter:', os.listdir ('LinuxHint'))
Lad os se output for denne kommando:
Kopiering af fil til en ny mappe
Bemærk, at når en fil kopieres ved hjælp af kopi() fungere, tilladelser til filen er også klonet men metadata for filen kopieres ikke. Dette betyder, at når du kontrollerer, hvornår denne fil blev oprettet, viser den den nye tid, da du kørte dette script.
Kopierer fil med metadata
I det sidste afsnit så vi, hvordan vi kunne lave en kopi af filen. Hvad hvis du vil oprette en nøjagtig klon af en fil, der involverer kloning af dens metadata, ligesom når filen blev lavet osv. Dette er også muligt, men dette fungerer muligvis ikke på et POSIX-baseret system. Lad os se på et eksempel på, hvordan dette kan gøres:
importer osimportere shutil
importtid
new_directory = 'LinuxHint'
src_file = './ Filer / hej.txt '
dest_file = './ LinuxHint / hej.txt '
def fil_metadata (fil):
stat_info = os.stat (fil)
print ('Mode:', okt (stat_info.st_mode))
print ('Oprettet:', tid.ctime (stat_info.st_ctime))
print ('Adgang:', tid.ctime (stat_info.st_atime))
print ('Modificeret:', tid.ctime (stat_info.st_mtime))
os.mkdir (ny_katalog)
print ('Metadata for kildefil:')
fil_metadata (src_fil)
shutil.copy2 (src_file, new_directory)
print ('Metadata for destinationsfil:')
file_metadata (dest_file)
Her er hvad vi kommer tilbage med denne kommando, når vi kører dette på et POSIX-baseret system (metadata klones ikke fuldstændigt):
Kopier fil med metadata
På ikke-POSIX-baserede systemer ville selv den oprettede og åbnede tid have matchet nøjagtigt.
Kloning af komplet bibliotek
I sidste afsnit så vi, hvordan vi kunne lave en kopi af filen. Her vil vi se, hvordan vi kan klone en komplet mappe rekursivt. Dette betyder, at hvis der findes en anden mappe i den mappe, vi vil klone, vil de også blive klonet.
importer pprintimportere shutil
importer os
src_directory = './ Filer '
dest_directory = './ LinuxHint '
shutil.copytree (src_directory, dest_directory)
print ('Kildeindhold:')
pprint.pprint (os.listdir (src_directory))
print ('Destinationens indhold:')
pprint.pprint (os.listdir (dest_directory))
Lad os se output for denne kommando:
Kopiering af et bibliotek
Bemærk, at den mappe, vi sender til copytree (), fungerer som destinationsmappen må ikke eksistere, før vi kører dette program.
Sletning af et bibliotek
Sletning af en mappe er meget enkel med rmtree () funktion i modulet. Lad os se denne funktion i aktion her:
importer pprintimportere shutil
importer os
delete_directory = 'LinuxHint'
current_directory = '.''
print ('Indhold før fjernelse:')
pprint.pprint (os.listdir (nuværende_katalog))
shutil.rmtree (delete_directory)
print ('Indhold efter fjernelse:')
pprint.pprint (os.listdir (nuværende_katalog))
Efter at have kørt scriptet, LinuxHint mappe slettes sammen med indholdet. Her er hvad vi kommer tilbage med denne kommando:
Slet mappe
Finde filer
Hvis du vil finde en fil, der findes på PATH-variablen på din maskine, kan vi bruge hvilken() funktion for at finde den fil ved navn. Lad os se på et demonstrationseksempel for denne funktion:
importere shutiludskrive (shutil.hvilket ('bsondump'))
udskrive (shutil.hvilke ('no-file-found'))
Her er hvad vi kommer tilbage med denne kommando:
Find fil på PATH
Overvågning af filsystemets plads
Med shutil-modulet har vi en funktion disk_usage (), hvorigennem vi også kan få diskpladsinformation om vores maskine. Lad os se på et eksempel, der viser disse data på en menneskelig læsbar måde:
importere shutiltotal_b, used_b, free_b = shutil.disk_usage ('.')
gb = 10 ** 9 # GB == gigabyte
print ('I alt: : 6.2f GB '.format (total_b / gb))
print ('Brugt: : 6.2f GB '.format (brugt_b / gb))
print ('Gratis: : 6.2f GB '.format (free_b / gb))
Her er hvad vi kommer tilbage med denne kommando:
Find filsystemplads
Arkivering af mapper
Som et sidste eksempel vil vi se, hvordan vi kan arkivere et katalog shutil-modul make_archive () fungere. Lad os se på prøveprogrammet:
importere shutilimporter os
archive_directory = \
os.sti.udvidelsesbruger (os.sti.join ('destination-katalog-sti', 'linuxhint'))
root_dir = os.sti.udvidelsesbruger (os.sti.join ('~', '.ssh '))
shutil.make_archive (archive_directory, 'gztar', root_dir)
Her er hvad vi kommer tilbage med denne kommando:
Arkiveringsmappe
Hvis du fjerner arkiveringen af TAR-filen og ser, vil den indeholde alle .ssh mappefiler i den.
Konklusion
I denne lektion så vi på, hvordan vi nemt kan administrere filobjekter med filhåndtering på højt niveau med shutil modul i Python. Handlinger som at kopiere indholdet af en fil, oprette en ny kopi af en fil osv. så let ud med dette modul.