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 osimportera 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 osimportera 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 osimportera 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 pprintimportera 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 pprintimportera 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 shutilskriva 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 shutiltotal_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 shutilimportera 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.