目次
- 1 1. บทนำ
- 2 2. การเตรียมการคัดลอกไฟล์ด้วย Python
- 3 3. วิธีใช้งานพื้นฐานของโมดูล shutil
- 4 4. วิธีคัดลอกโฟลเดอร์ทั้งหมด
- 5 5. เทคนิคการป้องกันการเขียนทับ
- 6 6. วิธีการย้ายไฟล์ด้วย Python
- 7 7. ตัวอย่างโค้ดการคัดลอกไฟล์ใน Python
- 8 8. ขั้นสูง: คัดลอกไฟล์ตามรูปแบบที่กำหนด
- 9 9. การจัดการข้อผิดพลาด (Error Handling)
- 10 10. สรุป
1. บทนำ
Python มีเครื่องมือที่ทรงพลังสำหรับการจัดการไฟล์ได้อย่างง่ายดาย โดยหนึ่งในงานที่ทำบ่อยที่สุดคือการคัดลอกไฟล์ บทความนี้จะแนะนำวิธีการคัดลอกไฟล์และโฟลเดอร์อย่างมีประสิทธิภาพด้วยโมดูลมาตรฐานของ Python ที่ชื่อว่าshutil พร้อมทั้งแสดงตัวอย่างโค้ด เทคนิคการป้องกันการเขียนทับ การจัดการข้อผิดพลาด รวมถึงวิธีการคัดลอกไฟล์ขั้นสูงAd
2. การเตรียมการคัดลอกไฟล์ด้วย Python
การนำเข้าโมดูล shutil
โมดูล shutil เป็นไลบรารีมาตรฐานของ Python ไม่จำเป็นต้องติดตั้งเพิ่มเติม สามารถนำเข้าได้ด้วยโค้ดด้านล่างนี้import shutilหลังจากนำเข้าแล้ว คุณสามารถใช้งานสำหรับการคัดลอก ย้าย หรือลบไฟล์ได้ และเมื่อใช้ร่วมกับโมดูล os จะสามารถตรวจสอบการมีอยู่ของไฟล์หรือโฟลเดอร์เพื่อเพิ่มความปลอดภัยในการจัดการข้อผิดพลาดได้ข้อดีของโมดูล shutil
โมดูล shutil มีจุดเด่นคือใช้งานง่ายและโครงสร้างโค้ดที่เรียบง่าย โดยเฉพาะเมื่อต้องการคัดลอกไฟล์หรือโฟลเดอร์จำนวนมากพร้อมกัน shutil ถือเป็นเครื่องมือที่ทรงพลังมาก
3. วิธีใช้งานพื้นฐานของโมดูล shutil
วิธีใช้ shutil.copy()
shutil.copy() เป็นฟังก์ชันพื้นฐานสำหรับคัดลอกไฟล์ โดยจะคัดลอกไฟล์จากต้นฉบับไปยังตำแหน่งใหม่import shutil
# คัดลอกไฟล์
shutil.copy('original.txt', 'copy.txt')หากไฟล์ปลายทางมีชื่อเดียวกันอยู่แล้ว จะถูกเขียนทับวิธีใช้ shutil.copy2()
shutil.copy2() จะคัดลอกไฟล์พร้อมข้อมูลเมตา (เช่น วันเวลา สถานะสิทธิ์การเข้าถึง) ทำให้ได้สำเนาที่สมบูรณ์ยิ่งขึ้นimport shutil
# คัดลอกไฟล์พร้อมเมตาดาต้า
shutil.copy2('original.txt', 'copy_with_metadata.txt')เหมาะสำหรับกรณีที่ต้องการสำเนาที่ครบถ้วนของไฟล์Ad
4. วิธีคัดลอกโฟลเดอร์ทั้งหมด
การใช้ shutil.copytree()
shutil.copytree() ใช้คัดลอกทั้งโฟลเดอร์แบบ recursive โดยจะคัดลอกทุกไฟล์และโฟลเดอร์ย่อยไปยังตำแหน่งใหม่import shutil
# คัดลอกโฟลเดอร์
shutil.copytree('source_directory', 'destination_directory')อย่างไรก็ตาม หากมีโฟลเดอร์ชื่อเดียวกันที่ปลายทางอยู่แล้ว จะเกิดข้อผิดพลาด จึงควรตรวจสอบล่วงหน้าการระบุไฟล์หรือโฟลเดอร์ที่ไม่ต้องการคัดลอก
สามารถใช้พารามิเตอร์ignore ร่วมกับ shutil.ignore_patterns() เพื่อข้ามไฟล์บางชนิดได้import shutil
# ข้ามไฟล์ .log ในการคัดลอก
shutil.copytree('source_directory', 'destination_directory', ignore=shutil.ignore_patterns('*.log'))โค้ดนี้จะไม่คัดลอกไฟล์ที่มีนามสกุล .log5. เทคนิคการป้องกันการเขียนทับ
ใช้ os.path.exists()
โดยปกติเมื่อใช้ shutil.copy() หรือ shutil.copy2() หากมีไฟล์ชื่อเดียวกันอยู่แล้วจะถูกเขียนทับ สามารถป้องกันได้ด้วยการตรวจสอบการมีอยู่ของไฟล์ก่อนimport shutil
import os
# ตรวจสอบไฟล์ก่อนคัดลอก
if not os.path.exists('copy.txt'):
shutil.copy('original.txt', 'copy.txt')
else:
print('ไฟล์มีอยู่แล้ว ข้ามการคัดลอก')ใช้ pathlib.Path.exists()
เมื่อใช้ pathlib จะทำให้ตรวจสอบไฟล์ได้ง่ายขึ้นfrom pathlib import Path
# ตรวจสอบด้วย Path object
dst = Path('copy.txt')
if not dst.exists():
shutil.copy('original.txt', dst)
else:
print('ไฟล์มีอยู่แล้ว ข้ามการคัดลอก')Ad
6. วิธีการย้ายไฟล์ด้วย Python
วิธีใช้ shutil.move()
shutil.move() ใช้สำหรับย้ายไฟล์หรือโฟลเดอร์ไปยังตำแหน่งใหม่import shutil
# ย้ายไฟล์
shutil.move('original.txt', 'new_folder/original.txt')หากโฟลเดอร์ปลายทางไม่มีอยู่ จะเกิด FileNotFoundError จึงควรตรวจสอบและสร้างโฟลเดอร์ก่อนimport shutil
import os
# ตรวจสอบและสร้างโฟลเดอร์
if not os.path.exists('new_folder'):
os.makedirs('new_folder')
# ย้ายไฟล์
shutil.move('original.txt', 'new_folder/original.txt') 
Ad
7. ตัวอย่างโค้ดการคัดลอกไฟล์ใน Python
ตัวอย่างการคัดลอกไฟล์
import shutil
# คัดลอกไฟล์
shutil.copy('data.txt', 'backup/data_backup.txt')ตัวอย่างการคัดลอกโฟลเดอร์
import shutil
# คัดลอกโฟลเดอร์
shutil.copytree('project_files', 'project_backup')ตัวอย่างการป้องกันการเขียนทับ
import shutil
import os
# คัดลอกโดยไม่เขียนทับ
if not os.path.exists('backup/report.txt'):
shutil.copy('report.txt', 'backup/report.txt')
else:
print('ไฟล์มีอยู่แล้ว ยกเลิกการคัดลอก')Ad
8. ขั้นสูง: คัดลอกไฟล์ตามรูปแบบที่กำหนด
คุณสามารถใช้โมดูลglob เพื่อเลือกคัดลอกเฉพาะไฟล์บางชนิด เช่น .txt หรือ .csvimport shutil
import glob
# คัดลอกไฟล์ .txt ทั้งหมด
for file in glob.glob('data/*.txt'):
shutil.copy(file, 'backup/')โค้ดนี้จะคัดลอกไฟล์ .txt ทั้งหมดจากโฟลเดอร์ data ไปยัง backupAd
9. การจัดการข้อผิดพลาด (Error Handling)
การจัดการข้อผิดพลาดเป็นสิ่งสำคัญ เช่น ไฟล์ไม่พบ หรือสิทธิ์ไม่เพียงพอตัวอย่างการใช้ try-except
import shutil
try:
shutil.copy('non_existent_file.txt', 'backup/')
except FileNotFoundError as e:
print(f'ไม่พบไฟล์: {e}')
except PermissionError as e:
print(f'เกิดข้อผิดพลาดด้านสิทธิ์: {e}')
except Exception as e:
print(f'เกิดข้อผิดพลาดที่ไม่คาดคิด: {e}')โค้ดนี้จะตรวจจับข้อผิดพลาดที่เป็นไปได้และแสดงข้อความที่เหมาะสมAd
10. สรุป
การใช้โมดูลshutil ของ Python ทำให้การคัดลอกไฟล์และโฟลเดอร์เป็นเรื่องง่าย คุณสามารถเพิ่มเทคนิคป้องกันการเขียนทับ คัดลอกไฟล์ตามรูปแบบที่กำหนด และจัดการข้อผิดพลาด เพื่อทำให้การจัดการไฟล์มีความปลอดภัยและมีประสิทธิภาพมากขึ้น หวังว่าบทความนี้จะช่วยให้คุณนำ Python ไปใช้ในงานประจำวันได้อย่างมั่นใจ 


