Fil- og katalogoperasjoner ved hjelp av Python

I en tidligere opplæring diskutert jeg hvordan vi kan lese, åpne, lukke og skrive til filer. I denne opplæringen vil jeg gå videre og diskutere ulike operasjoner vi kan utføre på filer og kataloger (mapper).

Du vet for eksempel at vi bruker filer mye, og å jobbe med filer går utover bare å åpne og lukke filen. Husker du hvor mange ganger du kopierte den aktuelle filen? Åh, eller når du omdøpte filen du lastet ned fra en nettside fordi den hadde et meningsløst navn? Det er noen typer operasjoner jeg skal diskutere i denne opplæringen. 

Klar? La oss da komme til poenget og begynne å gjøre interessante ting med våre filer og kataloger ved hjelp av Python!

shutil

shutil (Shell Utilities) er navnet på modulen vi skal bruke i denne opplæringen for å utføre forskjellige fil- og katalogoperasjoner. shutil leveres allerede med Python-installasjonen, slik at du ikke trenger å installere den manuelt. For å kunne benytte seg av denne modulen, er alt du trenger å gjøre importere modulen:

importere skjeen

Kopiere filer

La oss starte med vår første operasjon, det vil si, kopiere filer. For å gjøre det, bruker vi kopiere() funksjon fra shutil modul. Jeg skal bruke filen sample.pdf i denne veiledningens eksempler. Du kan gjerne laste ned denne filen eller bruke hvilken som helst fil du liker.

Følgende enkle skript vil vise deg hvordan du kopierer sample.pdf fra skrivebordet (der det er opprinnelig lokalisert) til en annen katalog Temp, som også ligger på skrivebordet:

importere shutil shutil.copy ('sample.pdf', 'Temp')

Legg merke til at jeg bare har oppført filnavnet og katalognavnet, siden jeg jobber med Terminal med skrivebordet som banen jeg bruker. Du kan i stedet angi hele banen til både filen du vil kopiere og katalogen du vil kopiere filen til, som i mitt tilfelle er som følger:

shutil.copy ('/ Users / Abder / Desktop / sample.pdf', '/ Brukere / Abder / Desktop / Temp')

Gå videre, åpne Temp katalog eller hvilken som helst katalog du har oppgitt, og du bør finne den kopierte filen der!

Hva om det andre argumentet var en fil i stedet for en katalog? Med andre ord, la oss si at du skrev følgende (jeg fjernet hele banen til filene, forutsatt at de begge er på skrivebordet):

importere shutil shutil.copy ('sample.pdf', 'file.pdf')

I dette tilfellet vil du ha en ny fil file.pdf, som er en kopi av den opprinnelige filen sample.pdf. Dermed, hvis du åpner file.pdf, du vil legge merke til at den har samme innhold fordi det faktisk er en kopi av sample.pdf.

Kan kilden og destinasjonen være den samme? La oss prøve å se.

shutil.copy ('sample.pdf', 'sample.pdf')

Det ser ut til at denne operasjonen vil gi oss en feil siden filnavnene ikke burde være de samme:

Traceback (siste samtalen sist): File "test.py", linje 2, i  shutil.copy ('sample.pdf', 'sample.pdf') Fil "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py ", linje 119, i kopi copyfile (src, dst) File" /usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py ", linje 69, i copyfile raise Feil ("'% s' og '% s' er den samme filen"% (src, dst)) shutil.Error: 'sample.pdf' og 'sample.pdf' er den samme filen

Kopiering av kataloger

I denne delen skal vi se hvordan vi kan kopiere en hel mappe (mappe) i stedet for en enkelt fil, som vi så i forrige avsnitt.

La oss si at vi har følgende katalogstruktur som vi vil kopiere. Det vil si at vi har en hovedkatalog Opprinnelig, som inneholder en katalog Original-en, som inneholder katalogen Original-2, og som inneholder katalogen Original-3, og i Original-3 Vi har vår fil sample.pdf (Puh… ).

Det vi vil gjøre nå, er å kopiere katalogen Opprinnelig med alt innhold til en ny katalog, og ring den nye katalogen Original kopi.

Dette kan enkelt gjøres ved hjelp av copytree () funksjon, som følger (forutsatt at alt skjer på skrivebordet):

importere shutil shutil.copytree ('Original', 'Original-Copy')

Du bør nå finne en ny katalog Original kopi med alt innhold og struktur av Opprinnelig.

Flytte filer

Flytte en fil er som å lage en cut-lim operasjon på filen. I Kopiere filer delen vi så hvordan du lager en kopi av en fil, mens du beholder den opprinnelige filen på den opprinnelige plasseringen.

I denne delen vil vi se hvordan du kan flytte (kutte) filen til et nytt sted, mens du fjerner det samtidig fra den opprinnelige plasseringen. Denne operasjonen utføres ganske enkelt ved hjelp av bevege seg() funksjon, som følger:

importere shutil shutil.move ('Sample.pdf', 'Temp')

Legg merke til det sample.pdf har blitt flyttet til katalogen Temp, og eksisterer ikke lenger på skrivebordet.

Hva om vi flyttet sample.pdf til en ny fil New-sample.pdf, som følger?

importere shutil shutil.move ('Sample.pdf', 'New-Sample.pdf')

I dette tilfellet vil du bare ha New-sample.pdf med samme innhold som sample.pdf, men sample.pdf eksisterer ikke lenger.

Flytte kataloger

Flytte kataloger utføres med samme funksjon som vi brukte i Flytte filer seksjonen, det vil si bevege seg(). La oss bruke det samme eksemplet som i Kopiering av kataloger delen, men nå med bevege seg() funksjon. 

importere shutil shutil.move ('Original', 'Original-Copy')

I dette tilfellet vil du ha en ny katalog Original kopi med samme innhold som Opprinnelig, men Opprinnelig eksisterer ikke lenger.

Endre navn på filer og kataloger

Gjett hva? Du kan også bruke bevege seg() funksjon til endre navn en fil eller katalog. Jeg vil ikke gjenta eksemplene igjen i denne delen. Men hvis du la merke til når du søkte på bevege seg() Fungerer på begge filene og katalogene ovenfor, nevnte vi at den opprinnelige filen / mappen ikke lenger eksisterer, men det finnes en ny fil / katalog med det samme innholdet. Dette er som å omdøpe en fil / katalog, er det ikke?

Slette filer og kataloger

Det virker som at shutil Modulen inneholder ikke en funksjon for sletting filer. Det inneholder imidlertid en funksjon for å slette kataloger: rmtree (). Vær forsiktig fordi slettingen er permanent, og dermed vil du ikke finn den slettede katalogen i søppelet.

Eksempelet nedenfor viser hvordan vi kan slette Original kopi katalogen:

Import shutil shutil.rmtree ('Original-Copy')

Hvis du vil slette en permanent fil, du kan bruke fjerne() Funksjonen fra Python er os modul, som følger:

importer oss os.remove ('Sample.pdf')

Konklusjon

Som du kan se, var vi i stand til å utføre viktige operasjoner på filer og kataloger-kopiere, flytte, endre navn og slette-veldig enkelt gjennom shutil og os-modulene. Du kan konsultere dokumentasjonen for disse modulene for mer informasjon om hva du kan gjøre med dem.