Python

shutil-modul i Python

shutil-modul i Python
Filhåndtering og håndtering af filobjekter betragtes som en af ​​de mest vanskelige opgaver på alle programmeringssprog. Nogle programmeringssprog giver os nogle værktøjer, der fjerner de vanskelige dele af filhåndtering med brugervenlige funktioner og grænseflader. Dette er præcis, hvad Python har shutil modul gør det også.

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 os
importere 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 os
importere 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 os
importere 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 pprint
importere 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 pprint
importere 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 shutil
udskrive (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 shutil
total_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 shutil
importer 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.

OpenTTD Tutorial
OpenTTD er et af de mest populære forretningssimuleringsspil derude. I dette spil skal du oprette en vidunderlig transportvirksomhed. Du starter dog i...
SuperTuxKart til Linux
SuperTuxKart er en fantastisk titel designet til at give dig Mario Kart-oplevelsen gratis på dit Linux-system. Det er ret udfordrende og sjovt at spil...
Kæmp om Wesnoth-vejledning
Slaget om Wesnoth er et af de mest populære open source-strategispil, som du kan spille på dette tidspunkt. Ikke kun har dette spil været under udvikl...