Pytonorm

shutil-modul i Python

shutil-modul i Python
Filhantering och hantering av filobjekt anses vara en av de mest knepiga uppgifterna i alla programmeringsspråk. Vissa programmeringsspråk ger oss några verktyg som tar bort de svåra delarna av filhantering med lättanvända funktioner och gränssnitt. Det är precis vad Python har shutil modulen gör det också.

Python shutil

Python shutil-modulen gör det möjligt för en utvecklare att använda filobjekt mycket enkelt och utan att gå djupare i detalj om hur saker fungerar under omslaget. Denna modul drar i princip bort lågnivåsemantiken för att skapa och hantera filobjekt, rengöra dem när användningen är klar och låter oss fokusera på applikationens affärslogik. Vi kommer att se många exempel här, låt oss komma igång.

Exempel med Python shutil-modul

Vi kommer att studera olika exempel som visar användningen av Python shutil här.

Kopiera en fil

Med kopiera fil() funktion i shutil modul kan vi göra en exakt kopia av en befintlig fil var som helst på maskinen. Låt oss titta på ett exempelprogram för att visa hur detta kan göras:

importera os
importera shutil
file_directory = './ Filer '
skriva ut ('Files before:', os.listdir (filkatalog))
shutil.kopiera fil('./ Filer / hej.Text', './ Filer / hej igen.Text')
skriva ut ('Files after:', os.listdir (filkatalog))

Vi kopierade precis en fil som finns i den angivna katalogen för att klona filen i samma katalog. Här är vad vi får tillbaka med det här kommandot:

Python shutil-filkopia

Det som är bra med den här funktionen är att den nämnda funktionen också tar namnet på den nya filen som ska skapas som inmatning.

Kopiera filer till en annan katalog

Det är möjligt att kopiera en fil till en ny katalog med shutils kopiera() fungera. Låt oss titta på det i aktion:

importera os
importera shutil
skriv ut ('Skapa en ny katalog.')
os.mkdir ('LinuxHint')
skriva ut ('Files before:', os.listdir ('LinuxHint'))
shutil.kopiera('./ Filer / hej.txt ',' LinuxHint ')
skriva ut ('Files after:', os.listdir ('LinuxHint'))

Låt oss se utdata för det här kommandot:

Kopierar filen till en ny katalog

Observera att när en fil kopieras med kopiera() fungera, behörigheter för filen är också klonade men metadata för filen kopieras inte. Det betyder att när du kontrollerar när den här filen skapades, kommer den att visa den nya tiden när du körde det här skriptet.

Kopierar fil med metadata

I det sista avsnittet såg vi hur vi kunde göra en kopia av filen. Vad händer om du vill skapa en exakt klon av en fil som involverar kloning av dess metadata liksom när filen gjordes etc. Detta är möjligt också men detta kanske inte fungerar på ett POSIX-baserat system. Låt oss titta på ett exempel på hur detta kan göras:

importera os
importera shutil
importtid
new_directory = 'LinuxHint'
src_file = './ Filer / hej.Text'
dest_file = './ LinuxHint / hej.Text'
def file_metadata (fil):
stat_info = os.stat (fil)
skriv ut ('Mode:', okt (stat_info.st_mode))
tryck ('Skapat:', tid.ctime (stat_info.st_ctime))
skriv ut ('Åtkomst:', tid.ctime (stat_info.st_atime))
skriv ut ('Modified:', tid.ctime (stat_info.st_mtime))
os.mkdir (ny_katalog)
skriv ut ('Metadata för källfil:')
file_metadata (src_file)
shutil.copy2 (src_file, new_directory)
skriv ut ('Metadata för målfil:')
file_metadata (dest_file)

Här är vad vi får tillbaka med det här kommandot när vi kör det på ett POSIX-baserat system (metadata är inte klonade helt):

Kopiera fil med metadata

På icke-POSIX-baserade system skulle även den skapade och åtkomsttiden ha matchat exakt.

Kloning av fullständig katalog

I det senaste avsnittet såg vi hur vi kunde göra en kopia av filen. Här ser vi hur vi kan klona en komplett katalog rekursivt. Det betyder att om det finns en annan katalog i katalogen som vi vill klona, ​​kommer de också att klonas.

importera pprint
importera shutil
importera os
src_directory = './ Filer '
dest_directory = './ LinuxHint '
shutil.copytree (src_directory, dest_directory)
skriva ut ('Källans innehåll:')
pprint.pprint (os.listdir (src_directory))
skriva ut ('Destinationens innehåll:')
pprint.pprint (os.listdir (dest_directory))

Låt oss se utdata för det här kommandot:

Kopiera en katalog

Observera att katalogen vi skickar till copytree () fungerar som målkatalogen får inte finnas innan vi kör programmet.

Ta bort en katalog

Att radera en katalog är mycket enkelt med rmtree () funktion i modulen. Låt oss se den här funktionen i aktion här:

importera pprint
importera shutil
importera os
delete_directory = 'LinuxHint'
current_directory = '.''
print ('Innehåll före borttagning:')
pprint.pprint (os.listdir (aktuell_katalog))
shutil.rmtree (delete_directory)
print ('Innehåll efter borttagning:')
pprint.pprint (os.listdir (aktuell_katalog))

Efter att ha kört skriptet, LinuxHint katalog raderas tillsammans med innehållet. Här är vad vi får tillbaka med det här kommandot:

Ta bort katalog

Hitta filer

Om du vill hitta en fil som finns på PATH-variabeln på din maskin kan vi använda som() funktion för att hitta den filen efter namn. Låt oss titta på ett demonstrationsexempel för den här funktionen:

importera shutil
skriva ut (shutil.vilken ('bsondump'))
skriva ut (shutil.vilken ('no-file-found'))

Här är vad vi får tillbaka med det här kommandot:

Hitta fil på PATH

Övervakning av filsystemets utrymme

Med shutil-modulen har vi en funktion disk_usage () genom vilken vi också kan få diskutrymmeinformation om vår maskin. Låt oss titta på ett exempel som visar dessa data på ett läsbart sätt:

importera shutil
total_b, used_b, free_b = shutil.disk_användning ('.')
gb = 10 ** 9 # GB == gigabyte
skriva ut ('Totalt: : 6.2f GB '.format (total_b / gb))
skriv ut ('Används: : 6.2f GB '.format (used_b / gb))
tryck ('Gratis: : 6.2f GB '.format (free_b / gb))

Här är vad vi får tillbaka med det här kommandot:

Hitta filsystemutrymme

Arkivera kataloger

Som ett sista exempel kommer vi att se hur vi kan arkivera en katalogstoppmodul make_archive () fungera. Låt oss titta på exempelprogrammet:

importera shutil
importera os
archive_directory = \
os.väg.expanduser (os.väg.gå med ('destination-katalog-sökväg', 'linuxhint'))
root_dir = os.väg.expanduser (os.väg.gå med ('~', '.ssh '))
shutil.make_archive (archive_directory, 'gztar', root_dir)

Här är vad vi får tillbaka med det här kommandot:

Arkivarkatalog

Om du tar bort arkiveringen av TAR-filen och tittar, kommer den att innehålla alla .ssh katalogfiler i den.

Slutsats

I den här lektionen tittade vi på hur vi enkelt kan hantera filobjekt med filhantering på hög nivå shutil modul i Python. Funktioner som att kopiera innehållet i en fil, skapa en ny kopia av en fil etc. såg enkelt ut med den här modulen.

Hur man laddar ner och spelar Sid Meier's Civilization VI på Linux
Introduktion till spelet Civilization 6 är ett modernt intag av det klassiska konceptet som introducerades i serien Age of Empires-spel. Idén var gans...
Hur man installerar och spelar Doom på Linux
Introduktion till Doom Doom-serien har sitt ursprung på 90-talet efter att den ursprungliga Doom släpptes. Det blev en omedelbar hit och från den tide...
Vulkan för Linux-användare
Med varje ny generation grafikkort ser vi spelutvecklare driva gränserna för grafisk trohet och komma ett steg närmare fotorealism. Men trots all kred...