Într-un tutorial anterior, am discutat cum putem citi, deschide, închide și scrie fișierelor. În acest tutorial, voi merge mai departe și vom discuta diferitele operații pe care le putem efectua pe fișiere și directoare (foldere).
Știți, de exemplu, folosim foarte mult fișierele, iar lucrul cu fișiere depășește doar deschiderea și închiderea fișierului. Vă amintiți de câte ori ați copiat acel dosar specific? O, sau când ai redenumit fișierul pe care l-ai descărcat de pe un site web pentru că avea un nume fără sens? Acestea sunt câteva tipuri de operațiuni pe care le voi discuta în acest tutorial.
Gata? Să începem să facem lucruri interesante cu fișierele și directoarele noastre folosind Python!
shutil
(Shell Utilities) este numele modulului pe care îl vom folosi în acest tutorial pentru a efectua diferite operațiuni de fișiere și directoare. shutil
deja vine cu instalarea dvs. Python, deci nu aveți nevoie să o instalați manual. Pentru a utiliza acest modul, tot ce trebuie să faceți este import
modulul:
importă shutil
Să începem cu prima noastră operațiune, copierea fișierelor. Pentru a face acest lucru, vom folosi copie()
funcția de la shutil
modul. Voi folosi exemplul de fișier.pdf în exemplele acestui tutorial. Puteți să descărcați acest fișier sau să utilizați orice fișier care vă place.
Următorul script simplu vă va arăta cum să copiați sample.pdf
de pe desktop (unde este inițial localizat) într-un alt director Temp
, care este, de asemenea, localizat pe desktop:
import shutil shutil.copy ('sample.pdf', 'Temp')
Observați că am enumerat numai numele fișierului și numele directorului, deoarece lucrez cu Terminalul meu, iar desktop-ul este calea pe care o folosesc. În schimb, puteți specifica calea completă atât pentru fișierul pe care doriți să îl copiați, cât și pentru directorul în care doriți să copiați fișierul, care, în cazul meu, este după cum urmează:
shutil.copy ('/ Utilizatori / Abder / Desktop / sample.pdf', '/ Users / Abder / Desktop / Temp')
Dă-i drumul, deschide-l Temp
directorul sau orice alt director pe care l-ați specificat și ar trebui să găsiți fișierul copiat acolo!
Ce se întâmplă dacă al doilea argument a fost un fișier în locul unui director? Cu alte cuvinte, să spunem că ați scris următoarele (am eliminat calea completă la fișiere, presupunând că acestea sunt ambele pe desktop):
import shutil shutil.copy ('sample.pdf', 'file.pdf')
În acest caz, veți avea un fișier nou file.PDF
, care este o copie a dosarului original sample.pdf
. Astfel, dacă vă deschideți file.PDF
, veți observa că acesta are același conținut deoarece este de fapt o copie a acestuia sample.pdf
.
Poate sursa și destinația să fie identice? Să încercăm să vedem.
shutil.copy ('sample.pdf', 'sample.pdf'
)
Se pare că această operație ne va aduce o eroare, deoarece numele fișierelor nu ar trebui să fie identice:
Trasare (ultimul apel ultimul): Fișierul "test.py", linia 2, înshutil.copy ('sample.pdf', 'sample.pdf') Fișier "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py ", linia 119, în copyfile (src, dst) Fișierul" /usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py ", linia 69, în creare copyfile Eroare ("'% s" și "% s" sunt același fișier "% (src, dst)) shutil.Error: sample.pdf și sample.pdf
În această secțiune, vom vedea cum putem copia un director întreg (dosar) mai degrabă decât un singur fișier, așa cum am văzut în secțiunea anterioară.
Să presupunem că avem următoarea structură de directoare pe care vrem să o copiem. Adică, avem un director principal Original
, care conține un director Original-1
, care conține directorul Original-2
, și care conține directorul Original-3
, si in Original-3
avem dosarul nostru Sample.pdf
(phew ...).
Ceea ce vrem să facem acum este să copiem directorul Original
cu tot conținutul său într-un director nou și sunați la acel director nou Copie originala
.
Acest lucru se poate face pur și simplu folosind copytree ()
după cum urmează (presupunând că totul se întâmplă pe desktop):
import shutil shutil.copytree ("Original", "Original-Copy")
Ar trebui să găsiți acum un nou director Copie originala
cu tot conținutul și structura lui Original
.
Mutarea unui fișier este ca și cum ai face o cut-paste operație în dosar. În Copierea fișierelor secțiune am văzut cum să faceți o copie a unui fișier, păstrând în același timp fișierul original în locația sa originală.
În această secțiune, vom vedea cum să mutăm fișierul într-o locație nouă, eliminându-l în același timp din locația inițială. Această operațiune se efectuează pur și simplu folosind mișcare()
funcție, după cum urmează:
import shutil shutil.move ('Sample.pdf', 'Temp')
Observa asta Sample.pdf
a fost mutat în director Temp
, și nu mai există pe desktop.
Dacă am mers Sample.pdf
la un nou fişier Nou-Sample.pdf
, după cum urmează?
import shutil shutil.move ('Sample.pdf', 'New-Sample.pdf')
În acest caz, veți avea doar Nou-Sample.pdf
cu același conținut ca și Sample.pdf
, dar Sample.pdf
nu mai exista.
Tabelele de mișcare se efectuează utilizând aceeași funcție pe care am folosit-o în Mutarea fișierelor secțiune, adică mișcare()
. Să folosim același exemplu ca în Copierea directoarelor secțiune, dar acum cu mișcare()
funcţie.
import shutil shutil.move ("Original", "Original-Copy")
În acest caz, veți avea un nou director Copie originala
cu același conținut ca și Original
, dar Original
nu mai exista.
Ghici ce? De asemenea, puteți utiliza funcția mișcare()
funcția pentru a redenumiți un fișier sau un director. Nu voi mai repeta exemplele din această secțiune. Dar, dacă ați observat când aplicați mișcare()
funcția de pe ambele fișiere și directoarele de mai sus, am menționat că fișierul / directorul original nu mai există, dar există un nou fișier / director cu același conținut. Acest lucru este ca redenumirea unui fișier / director, nu-i așa??
Se pare că shutil
modulul nu conține o funcție de ștergere fișiere. Totuși, aceasta conține o funcție pentru ștergerea directoarelor: rmtree ()
. Fiți atent, deoarece ștergerea este permanentă și, astfel, o veți face nu găsiți directorul șters în coșul de gunoi.
Exemplul de mai jos arată modul în care putem șterge definitiv Copie originala
director:
import shutil shutil.rmtree ("Original-Copy")
Dacă doriți să ștergeți definitiv a fişier, puteți utiliza elimina()
funcție de la Python os
modul, după cum urmează:
import os os.remove ('Sample.pdf')
După cum puteți vedea, am reușit să efectuăm operații importante pe fișiere și directoare - copiați, mutați, redenumiți și ștergeți - foarte ușor prin modulele shutil și os. Puteți consulta documentația acestor module pentru mai multe informații despre ce puteți face cu ei.