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:
dest
bắ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!