Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Cách sao chép file trong Python
Python được sử dụng rộng rãi như một công cụ tự động hóa, và một trong những nhiệm vụ tự động hóa phổ biến nhất là sao chép file từ thư mục nguồn sang thư mục đích.

Nhiều người thường nghĩ thư viện os có thể thực hiện nhiệm vụ này, nhưng thực tế, os không hỗ trợ trực tiếp việc sao chép hoặc di chuyển file .Trong bài viết này, mình sẽ tìm hiểu cách sử dụng module shutil để sao chép file từ một vị trí đến vị trí khác.
Giới thiệu về shutil trong Python
shutil là một trong những module được tích hợp sẵn trong Python. Nó cung cấp các thao tác cấp cao liên quan đến quản lý file , bao gồm thay đổi quyền sở hữu file , sao chép, di chuyển, nén, và xóa file .
Module này hỗ trợ 4 cách để sao chép file :
Bài viết này được đăng tại [free tuts .net]
shutil.copy(src, dest) 
Hàm này nhận hai tham số:
src(đường dẫn file nguồn): Đường dẫn đầy đủ đến file cần sao chép.dest(đường dẫn đích): Có thể là đường dẫn thư mục hoặc file .
File nguồn sẽ được sao chép đến vị trí đích. Nếu đích là một thư mục, file sẽ được sao chép với tên gốc. Nếu đích là một file , file nguồn sẽ được sao chép và đổi tên thành file đích.
Lưu ý: copy() chỉ sao chép quyền truy cập (permissions) của file , không sao chép metadata (thông tin như thời gian tạo).
Ví dụ:
import shutil
# Sao chép và đổi tên file 
shutil.copy("/Desktop/notes.txt", "/Documents/class_notes.txt")
# Sao chép file với cùng tên
shutil.copy("/Desktop/notes.txt", "/Documents/")
shutil.copyfile(src, dest)
Hàm này tương tự như copy(), nhưng có vài điểm khác biệt:
destbắt buộc phải là đường dẫn đầy đủ đến file mới (không được là thư mục).- Không sao chép cả quyền truy cập lẫn metadata.
 
Ví dụ:
import shutil
# Sao chép file và đổi tên
shutil.copyfile("/Desktop/notes.txt", "/Documents/class_notes.txt")
shutil.copyfileobj(src_obj, dest_obj)
Hàm này được sử dụng khi cần sao chép nội dung giữa hai đối tượng file (file-like objects).
src_obj: Đối tượng file nguồn (mở bằngopen).dest_obj: Đối tượng file đích.- Hàm này không sao chép quyền truy cập hay metadata.
 
Ví dụ:
import shutil
# Mở file nguồn và đích
src_obj = open("/Desktop/notes.txt", "r")
dest_obj = open("/Documents/notes.txt", "w")
# Sao chép nội dung từ file nguồn sang file đích
shutil.copyfileobj(src_obj, dest_obj)
# Đóng cả hai file 
src_obj.close()
dest_obj.close()
shutil.copy2(src, dest)
Hàm này giống hệt copy(), nhưng có sao chép metadata (như thời gian tạo, chỉnh sửa).
Ví dụ:
import shutil
# Sao chép file kèm metadata
shutil.copy2("/Desktop/notes.txt", "/Documents/class_notes.txt")
shutil.copy2("/Desktop/notes.txt", "/Documents/")
So sánh các hàm sao chép trong shutil  trong Python
| Hàm | Quyền truy cập (Permissions) | Metadata | Đích là thư mục | Đích là file | 
|---|---|---|---|---|
shutil.copy | 
			✅ | ❌ | ✅ | ✅ | 
shutil.copyfile | 
			❌ | ❌ | ❌ | ✅ | 
shutil.copyfileobj | 
			❌ | ❌ | ❌ | ✅ | 
shutil.copy2 | 
			✅ | ✅ | ✅ | ✅ | 
Khi nào nên sử dụng shutil?
copy: Khi bạn cần sao chép file và không quan tâm đến metadata.copyfile: Khi bạn cần chỉ định file đích rõ ràng, không cần metadata.copyfileobj: Khi làm việc với các đối tượng file , ví dụ sao chép giữa file-like objects.copy2: Khi bạn muốn sao chép cả quyền truy cập và metadata.
shutil là công cụ mạnh mẽ và tiện lợi giúp bạn quản lý file dễ dàng trong các tác vụ tự động hóa.
Kết bài
Module shutil là một công cụ mạnh mẽ trong Python, đặc biệt hữu ích cho các tác vụ tự động hóa liên quan đến việc sao chép, di chuyển và quản lý file . Với sự linh hoạt của các hàm như copy, copyfile, copyfileobj, và copy2, bạn có thể dễ dàng lựa chọn giải pháp phù hợp với yêu cầu cụ thể của mình. Hãy thử áp dụng chúng vào các dự án thực tế để tiết kiệm thời gian và tăng hiệu quả công việc!

            Các kiểu dữ liệu trong C ( int - float - double - char ...)        
            Thuật toán tìm ước chung lớn nhất trong C/C++        
            Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)        
            ComboBox - ListBox trong lập trình C# winforms        
            Random trong Python: Tạo số random ngẫu nhiên        
            Lệnh cin và cout trong C++        
                Cách khai báo biến trong PHP, các loại biến thường gặp            
                Download và cài đặt Vertrigo Server            
                Thẻ li trong HTML            
                Thẻ article trong HTML5            
                Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên            
                Cách dùng thẻ img trong HTML và các thuộc tính của img            
                Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng