Gabay sa Pagkopya ng File gamit ang Python: shutil at Error

1. Pambungad

Nagbibigay ang Python ng makapangyarihang mga tool para sa madaling paghawak ng mga file. Sa mga ito, ang pagkopya ng file ay isa sa mga pangkaraniwang gawain. Sa artikulong ito, gagamitin natin ang shutil module, na bahagi ng standard library ng Python, upang ipakita kung paano epektibong kopyahin ang mga file at direktoryo. Kasama ang mga konkretong halimbawa ng code, tatalakayin din natin ang mga teknik para maiwasan ang pag-override, paghawak ng mga error, at pati na rin ang mga advanced na paraan ng pagkopya ng file.

2. Paghahanda para sa pagkopya ng mga file gamit ang Python

Pag-import ng module na shutil

Ang shutil module ay bahagi ng standard library ng Python, kaya hindi na kailangan ng karagdagang pag-install. I-import ito gamit ang sumusunod na code.
import shutil
Magagawa mo ang pag-copy, paglipat, at pag-delete ng mga file. Bukod dito, kapag pinagsama mo ito sa module na os, maaari mong suriin ang pagkakaroon ng mga file o direktoryo at mapalakas ang paghawak ng mga error.

Mga benepisyo ng module na shutil

Ang shutil module ay kilala sa intuitive na paggamit at simpleng istruktura ng code. Lalo na kapag kailangan mong magsagawa ng batch na operasyon sa buong mga file o direktoryo, ang shutil ay nagiging isang makapangyarihang tool.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. Pangunahing Paggamit ng shutil Module

Paggamit ng shutil.copy()

shutil.copy() ay ang pangunahing function para sa pagkopya ng mga file. Kinokopya nito ang orihinal na file papunta sa tinukoy na bagong lokasyon.
import shutil

# Kopyahin ang file
shutil.copy('original.txt', 'copy.txt')
Kung may umiiral na file na may parehong pangalan sa destinasyon, ito ay mapapalitan.

Paggamit ng shutil.copy2()

shutil.copy2() ay function na kumokopya kasama ang metadata ng file (tulad ng petsa ng paglikha, mga pahintulot, atbp.).
import shutil

# Kopyahin ang nilalaman ng file at metadata
shutil.copy2('original.txt', 'copy_with_metadata.txt')
Kapaki-pakinabang ito kapag nais mong lumikha ng ganap na kopya ng file.

4. Paraan ng pagkopya ng buong direktoryo

shutil.copytree() Paggamit

shutil.copytree() ay isang function para kopyahin nang rekursibo ang buong direktoryo. Kinokopya nito ang lahat ng file at subdirectory sa loob ng orihinal na direktoryo papunta sa bagong lokasyon.
import shutil

# Kopya ng direktoryo
shutil.copytree('source_directory', 'destination_directory')
Gayunpaman, kung may umiiral na direktoryo na may parehong pangalan sa destinasyon, magdudulot ito ng error, kaya kailangan munang i-verify.

Pagtukoy ng mga file o direktoryo na hindi isasama kapag kumokopya

Upang alisin ang ilang partikular na file o direktoryo mula sa pagkopya, gamitin ang argumentong ignore kasama ang shutil.ignore_patterns().
import shutil

# Kopya nang hindi isinasama ang mga .log file
shutil.copytree('source_directory', 'destination_directory', ignore=shutil.ignore_patterns('*.log'))
Sa code na ito, inaalis ang mga .log file at kinokopya ang buong direktoryo.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. Mga Teknik para Maiwasan ang Pag-Overwrite

Gamitin ang os.path.exists()

Kapag ginamit mo ang shutil.copy() o shutil.copy2(), kung may umiiral na file na may parehong pangalan, awtomatikong ito ay mapapalitan. Upang maiwasan ito, kailangan munang suriin kung umiiral ang file。
import shutil
import os

# Pagsusuri ng pag-iral ng file upang maiwasan ang pag-overwrite
if not os.path.exists('copy.txt'):
    shutil.copy('original.txt', 'copy.txt')
else:
    print('Umiiral na ang file. Laktawan ang pagkopya.')

Gamitin ang pathlib.Path.exists()

Sa pamamagitan ng paggamit ng pathlib, mas madaling maisagawa ang pagsusuri ng pag-iral ng file。
from pathlib import Path

# Pagsusuri ng pag-iral gamit ang Path object
dst = Path('copy.txt')

if not dst.exists():
    shutil.copy('original.txt', dst)
else:
    print('Umiiral na ang file. Laktawan ang pagkopya.')

6. Paano maglipat ng file gamit ang Python

shutil.move() na paraan

shutil.move() ay isang function na naglilipat ng mga file at direktoryo sa ibang lokasyon.
import shutil

# Paglipat ng file
shutil.move('original.txt', 'new_folder/original.txt')
Kung ang destinasyong direktoryo ay hindi umiiral, magtataas ng FileNotFoundError, kaya inirerekomenda na suriin muna ang pag-iral ng direktoryo at lumikha ito kung kinakailangan.
import shutil
import os

# Pag-verify at paglikha ng direktoryo
if not os.path.exists('new_folder'):
    os.makedirs('new_folder')

# Paglipat ng file
shutil.move('original.txt', 'new_folder/original.txt')

7. Halimbawa ng code para sa pagkopya ng file gamit ang Python

Halimbawa ng pagkopya ng file

import shutil

# Kopyahin ang file
shutil.copy('data.txt', 'backup/data_backup.txt')

Halimbawa ng pagkopya ng buong direktoryo

import shutil

# Kopyahin ang direktoryo
shutil.copytree('project_files', 'project_backup')

Halimbawa para maiwasan ang pag-override

import shutil
import os

# Kopya upang hindi mag-override
if not os.path.exists('backup/report.txt'):
    shutil.copy('report.txt', 'backup/report.txt')
else:
    print('Ang file ay umiiral na. Ihihinto ang pagkopya.')

8. Advanced: Paraan ng pagkopya lamang ng mga tiyak na format ng file

glob Sa paggamit ng glob module, maaari mong piliin at kopyahin lamang ang mga tiyak na format ng file (halimbawa .txt o .csv).
import shutil
import glob

# Kopyahin ang lahat ng .txt file
for file in glob.glob('data/*.txt'):
    shutil.copy(file, 'backup/')
Sa ganitong paraan, kokopyahin ang lahat ng .txt file sa loob ng folder na data papunta sa folder na backup.

9. Paghawak ng Error at Exception

Mahalagang magpatupad ng exception handling para sa mga error na maaaring mangyari habang nag-ooperate sa mga file. Halimbawa, maaaring hindi mahanap ang file o magkaroon ng error sa pahintulot.

Pagdaragdag ng Pangunahing Exception Handling

import shutil

try:
    shutil.copy('non_existent_file.txt', 'backup/')
except FileNotFoundError as e:
    print(f'Hindi mahanap ang file: {e}')
except PermissionError as e:
    print(f'Nagkaroon ng error sa pahintulot: {e}')
except Exception as e:
    print(f'Nagkaroon ng hindi inaasahang error: {e}')
Sa code na ito, kinukuha ang mga tiyak na error at isinasagawa ang naaangkop na pagproseso.

10. Buod

Kung gagamitin mo ang shutil module ng Python, madali mong magagawa ang pagkopya ng mga file at direktoryo. Sa pamamagitan ng mga teknik para maiwasan ang pag-override, paraan para kopyahin lamang ang mga tiyak na file, at pagdaragdag ng error handling, mas magiging ligtas at epektibo ang pag-manipula ng mga file. Gamitin ang artikulong ito bilang sanggunian, at subukan mong gamitin ang pag-kopya ng file sa Python sa iyong pang-araw-araw na gawain.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール