In een vorige tutorial heb ik besproken hoe we bestanden kunnen lezen, openen, sluiten en schrijven. In deze tutorial ga ik verder en bespreek ik verschillende bewerkingen die we kunnen uitvoeren op bestanden en mappen (mappen).
Weet u, we gebruiken bijvoorbeeld veel bestanden en het werken met bestanden gaat verder dan alleen het openen en sluiten van het bestand. Weet je nog hoe vaak je dat specifieke bestand hebt gekopieerd? Oh, of toen je het bestand dat je van een website downloadde hernoemde, omdat het een betekenisloze naam had? Dat zijn enkele soorten operaties die ik in deze tutorial ga bespreken.
Klaar? Laten we dan ter zake gaan en interessante dingen gaan doen met onze bestanden en mappen met behulp van Python!
shutil
(Shell Utilities) is de naam van de module die we in deze zelfstudie zullen gebruiken om verschillende bestands- en directorybewerkingen uit te voeren. shutil
komt al met je Python-installatie, dus je hoeft het niet handmatig te installeren. Om gebruik te maken van deze module hoeft u alleen maar te doen importeren
de module:
invoer sluit
Laten we beginnen met onze eerste operatie, dat wil zeggen, bestanden kopiëren. Om dat te doen, zullen we de kopiëren()
functie van de shutil
module. Ik ga het bestand sample.pdf gebruiken in de voorbeelden van deze tutorial. U kunt dit bestand gratis downloaden of elk gewenst bestand gebruiken.
Het volgende eenvoudige script laat zien hoe je kunt kopiëren voorbeeld.pdf
vanaf de desktop (waar deze zich oorspronkelijk bevond) naar een andere map Temp
, welke zich ook op de desktop bevindt:
import shutil shutil.copy ('sample.pdf', 'Temp')
Merk op dat ik alleen de bestandsnaam en de mapnaam heb vermeld, omdat ik met mijn terminal werk, waarbij de desktop het pad is dat ik gebruik. U kunt in plaats daarvan het volledige pad opgeven naar zowel het bestand dat u wilt kopiëren als naar de map waarnaar u het bestand wilt kopiëren, wat in mijn geval als volgt is:
shutil.copy ('/ Users / Abder / Desktop / sample.pdf', '/ Users / Abder / Desktop / Temp')
Ga je gang, open de Temp
map of elke map die u hebt opgegeven, en u zou het gekopieerde bestand daar moeten vinden!
Wat als het tweede argument een bestand was in plaats van een map? Met andere woorden, laten we zeggen dat je het volgende hebt getypt (ik heb het volledige pad naar de bestanden verwijderd, ervan uitgaande dat ze zich allebei op de desktop bevinden):
import shutil shutil.copy ('sample.pdf', 'file.pdf')
In dit geval heeft u een nieuw bestand file.pdf
, wat een kopie is van het originele bestand voorbeeld.pdf
. Dus als je opent file.pdf
, je zult merken dat het dezelfde inhoud heeft omdat het eigenlijk een kopie is van voorbeeld.pdf
.
Kunnen de bron en bestemming hetzelfde zijn? Laten we het proberen.
shutil.copy ('sample.pdf', 'sample.pdf'
)
Het lijkt erop dat deze operatie ons een fout zal opleveren, aangezien de bestandsnamen niet hetzelfde zouden moeten zijn:
Traceback (meest recente oproep laatste): bestand 'test.py', regel 2, inshutil.copy ('sample.pdf', 'sample.pdf') Bestand "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py ", regel 119, in copy copyfile (src, dst) Bestand" /usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py ", regel 69, in copyfile raise Error ("'% s' en '% s' zijn hetzelfde bestand"% (src, dst)) shutil.Error: 'sample.pdf' en 'sample.pdf' zijn hetzelfde bestand
In deze sectie gaan we bekijken hoe we een hele map (map) kunnen kopiëren in plaats van een enkel bestand, zoals we in de vorige sectie hebben gezien.
Laten we zeggen dat we de volgende directorystructuur hebben die we willen kopiëren. Dat wil zeggen, we hebben een hoofddirectory origineel
, welke een map bevat Original-1
, welke de map bevat Original-2
, en die de map bevat Original-3
, en in Original-3
we hebben ons bestand sample.pdf
(pfff ...).
Wat we nu willen doen is de map kopiëren origineel
met al zijn inhoud naar een nieuwe map en bel die nieuwe map Originele kopie
.
Dit kan eenvoudig worden gedaan met behulp van de copytree ()
functie, als volgt (ervan uitgaande dat alles op de desktop gebeurt):
import shutil shutil.copytree ('Original', 'Original-Copy')
Je zou nu een nieuwe map moeten vinden Originele kopie
met alle inhoud en structuur van origineel
.
Het verplaatsen van een bestand is als het maken van een knippen plakken bewerking op het bestand. In de Bestanden kopiëren sectie zagen we hoe een kopie van een bestand te maken, terwijl het oorspronkelijke bestand op de oorspronkelijke locatie werd bewaard.
In dit gedeelte zullen we zien hoe het bestand naar een nieuwe locatie verplaatst (geknipt) kan worden en tegelijkertijd op de oorspronkelijke locatie kan worden verwijderd. Deze handeling wordt eenvoudig uitgevoerd met behulp van de bewegen ()
functie, als volgt:
import shutil shutil.move ('Sample.pdf', 'Temp')
Let erop dat sample.pdf
is verplaatst naar de map Temp
, en bestaat niet meer op het bureaublad.
Wat als we verhuisden sample.pdf
naar een nieuw het dossier Nieuw-Sample.pdf
, als volgt?
import shutil shutil.move ('Sample.pdf', 'New-Sample.pdf')
In dit geval heeft u alleen Nieuw-Sample.pdf
met dezelfde inhoud als sample.pdf
, maar sample.pdf
bestaat niet meer.
Het verplaatsen van mappen wordt uitgevoerd met behulp van dezelfde functie die we gebruikten in de Bestanden verplaatsen sectie, dat is bewegen ()
. Laten we hetzelfde voorbeeld gebruiken als in de Mappen kopiëren sectie, maar nu met de bewegen ()
functie.
import shutil shutil.move ('Original', 'Original-Copy')
In dit geval heeft u een nieuwe map Originele kopie
met dezelfde inhoud als origineel
, maar origineel
bestaat niet meer.
Raad eens? U kunt ook de bewegen ()
functie naar andere naam geven een bestand of map. Ik zal de voorbeelden niet herhalen in deze sectie. Maar, als u het merkt bij het toepassen van de bewegen ()
functie op zowel bovenstaande bestanden als mappen, hebben we vermeld dat het oorspronkelijke bestand / map niet meer bestaat, maar er bestaat een nieuw bestand / map met dezelfde inhoud. Dit is hetzelfde als het hernoemen van een bestand / map, is het niet?
Het lijkt erop dat de shutil
module bevat geen functie om te verwijderen bestanden. Het bevat echter wel een functie voor het verwijderen van mappen: rmtree ()
. Wees voorzichtig, want de verwijdering is permanent, en zo zul je niet zoek de verwijderde map in uw prullenbak.
Het onderstaande voorbeeld laat zien hoe we het kunnen verwijderen Originele kopie
directory:
import shutil shutil.rmtree ('Original-Copy')
Als u een a permanent wilt verwijderen het dossier, je kunt de gebruiken verwijderen()
functie van Python's os
module, als volgt:
import os os.remove ('Sample.pdf')
Zoals je ziet, waren we in staat om belangrijke bewerkingen op bestanden en directory's - kopiëren, verplaatsen, hernoemen en verwijderen - heel eenvoudig uit te voeren via de shutil- en os-modules. U kunt de documentatie van deze modules raadplegen voor meer informatie over wat u ermee kunt doen.