- 1 1. Sissejuhatus
- 2 2. Ettevalmistus failide kopeerimiseks Pythonis
- 3 3. shutil mooduli põhiline kasutamine
- 4 4. Kataloogi tervikuna kopeerimine
- 5 5. Ülekirjutamise vältimise tehnikad
- 6 6. Failide liigutamine Pythonis
- 7 7. Pythoni failikopeerimise näited
- 8 8. Täpsem: ainult kindla failivormingu kopeerimine
- 9 9. Vigade käsitlemine ja erindite töötlemine
- 10 10. Kokkuvõte
1. Sissejuhatus
Python pakub võimsaid tööriistu failide haldamiseks. Nende seas on failide kopeerimine üks igapäevasemaid ülesandeid. Käesolevas artiklis tutvustame, kuidas kasutada Pythoni standardteeki shutil
, et kopeerida faile ja katalooge tõhusalt. Toome näiteid koodist, käsitleme ülekirjutamise vältimise tehnikaid, vigade töötlemist ning ka edasijõudnud failide kopeerimise meetodeid.
2. Ettevalmistus failide kopeerimiseks Pythonis
shutil
mooduli importimine
shutil
on Pythoni standardteegi osa ning eraldi paigaldamist ei vaja. Importimiseks kasuta järgmist koodi:
import shutil
Sellega saad faile kopeerida, liigutada ja kustutada. Lisaks saab seda kombineerida os
mooduliga, et kontrollida failide ja kataloogide olemasolu ning parandada vigade käsitlemist.
shutil
mooduli eelised
shutil
paistab silma oma lihtsa süntaksi ja intuitiivse kasutuse poolest. Eriti kasulik on see, kui on vaja hallata tervet kataloogi või mitut faili korraga.

3. shutil mooduli põhiline kasutamine
shutil.copy()
kasutamine
shutil.copy()
on baasfunktsioon failide kopeerimiseks. See kopeerib lähtefaili määratud asukohta.
import shutil
# Faili kopeerimine
shutil.copy('original.txt', 'copy.txt')
Kui sihtkataloogis on juba samanimeline fail, kirjutatakse see üle.
shutil.copy2()
kasutamine
shutil.copy2()
kopeerib lisaks faili sisule ka metaandmed (näiteks loomiskuupäeva ja õigused).
import shutil
# Sisu ja metaandmete kopeerimine
shutil.copy2('original.txt', 'copy_with_metadata.txt')
See on kasulik juhul, kui on vaja teha faili täielik koopia.
4. Kataloogi tervikuna kopeerimine
shutil.copytree()
kasutamine
shutil.copytree()
kopeerib kogu kataloogi koos alamkataloogide ja failidega.
import shutil
# Kataloogi kopeerimine
shutil.copytree('source_directory', 'destination_directory')
Kui sihtkataloog on juba olemas, tekib viga. Seetõttu on soovitatav enne kontrollida.
Failide või kataloogide välistamine kopeerimisel
Spetsiifiliste failide või kaustade välistamiseks kasuta ignore
argumenti koos shutil.ignore_patterns()
funktsiooniga.
import shutil
# Ignoreeri .log-faile kopeerimisel
shutil.copytree('source_directory', 'destination_directory', ignore=shutil.ignore_patterns('*.log'))
See kood välistab kõik .log
failid kopeerimisprotsessist.
5. Ülekirjutamise vältimise tehnikad
os.path.exists()
kasutamine
Kui kasutada shutil.copy()
või shutil.copy2()
, kirjutatakse olemasolevad failid vaikimisi üle. Selle vältimiseks tuleks kontrollida enne kopeerimist, kas fail juba eksisteerib.
import shutil
import os
# Faili olemasolu kontroll ülekirjutamise vältimiseks
if not os.path.exists('copy.txt'):
shutil.copy('original.txt', 'copy.txt')
else:
print('Fail on juba olemas. Kopeerimine jäetakse vahele.')
pathlib.Path.exists()
kasutamine
pathlib
moodul võimaldab teha faili olemasolu kontrolli veelgi intuitiivsemalt.
from pathlib import Path
# Kontroll Path-objekti abil
dst = Path('copy.txt')
if not dst.exists():
shutil.copy('original.txt', dst)
else:
print('Fail on juba olemas. Kopeerimine jäetakse vahele.')
6. Failide liigutamine Pythonis
shutil.move()
kasutamine
shutil.move()
liigutab faile või katalooge uude asukohta.
import shutil
# Faili liigutamine
shutil.move('original.txt', 'new_folder/original.txt')
Kui sihtkausta ei eksisteeri, tekib FileNotFoundError
. Sellisel juhul on soovitatav kaust enne luua.
import shutil
import os
# Kausta olemasolu kontroll ja loomine
if not os.path.exists('new_folder'):
os.makedirs('new_folder')
# Faili liigutamine
shutil.move('original.txt', 'new_folder/original.txt')

7. Pythoni failikopeerimise näited
Faili kopeerimise näide
import shutil
# Faili kopeerimine
shutil.copy('data.txt', 'backup/data_backup.txt')
Kataloogi kopeerimise näide
import shutil
# Kataloogi kopeerimine
shutil.copytree('project_files', 'project_backup')
Ülekirjutamise vältimise näide
import shutil
import os
# Faili kopeerimine ilma ülekirjutamiseta
if not os.path.exists('backup/report.txt'):
shutil.copy('report.txt', 'backup/report.txt')
else:
print('Fail on juba olemas. Kopeerimine katkestatakse.')
8. Täpsem: ainult kindla failivormingu kopeerimine
Kui kasutada glob
moodulit, saab valida ainult kindla laiendiga faile (nt .txt
või .csv
).
import shutil
import glob
# Kõigi .txt-failide kopeerimine
for file in glob.glob('data/*.txt'):
shutil.copy(file, 'backup/')
See kood kopeerib kõik .txt
failid kaustast data
kausta backup
.
9. Vigade käsitlemine ja erindite töötlemine
Failioperatsioonidega kaasnevad sageli vead, näiteks faili puudumine või õiguste probleemid. Seetõttu on oluline lisada erindite käsitlemine.
Lihtne erindite käsitlemise näide
import shutil
try:
shutil.copy('non_existent_file.txt', 'backup/')
except FileNotFoundError as e:
print(f'Faili ei leitud: {e}')
except PermissionError as e:
print(f'Õiguste viga: {e}')
except Exception as e:
print(f'Ootamatu viga: {e}')
Selles koodis püüame kinni erinevad vead ja anname vastava teate.
10. Kokkuvõte
Pythoni shutil
mooduli abil saab faile ja katalooge hõlpsasti kopeerida. Kui lisada ülekirjutamise vältimise tehnikad, konkreetsete failide filtreerimine ja vigade töötlemine, muutub failihaldus turvalisemaks ja tõhusamaks. Kasuta neid meetodeid igapäevastes töövoogudes, et automatiseerida failihalduse protsesse Pythonis.