Hướng dẫn cách xử lý file trong Python. Bạn sẽ học được cách di chuyển file trong python bằng hàm shutil.move() trong module os, và ứng dụng để di chuyển file kết hợp đổi tên file, di chuyển toàn bộ file trong thư mục python, hay xử lý lỗi di chuyển file trong python khi thư mục đích đã có file khác cùng tên sau bài học này.
Di chuyển file trong python | shutil.move()
Chúng ta sử dụng shutil.move() trong python để di chuyển file hoặc thư mục đã tồn tại từ trước đó sang một thư mục mới, với cú pháp tổng quát sau đây:
shutil.move(src, dst, copy_function=copy2)
Trong đó:
src
là đường dẫn nguồndst
là đường dẫn đíchcopy_function
là hàm dùng khi di chuyển file hay thư mục. Mặc định hàm này làcopy2
nhằm lấy được cả metadata của file hay thư mục gốc.
Thông thường chúng ta lược bỏ đối số copy_function=copy2
và sử dụng cú pháp rút gọn của shutil.move() trong python để di chuyển file.
Giả sử bạn có một thư mục có cấu trúc như sau:
data ├── user │ ├── dir │ └── user.txt ├── client └── move.py
Bạn muốn di chuyển file user.txt
từ thư mục user
sang thư mục client
, hãy chỉ định src
là đường dẫn file user.txt
và dst
là đường dẫn thư mục client
như sau:
import shutil |
Sau khi chạy lệnh, một file mới có cùng tên user.txt
và metadata(thời gian tạo, thời gian sửa file v.v) cũng như quyền truy cập sẽ được tạo ở thư mục client
. Sau đó, file gốc user.txt
trong thư mục user
sẽ được xóa đi và kết thúc quá trình di chuyển file trong python.
Lưu ý, nếu như bạn muốn di chuyển file tới một thư mục mà thư mục đó vốn không tồn tại, ví dụ như là thư mục serve
, lỗi sẽ xảy ra:
shutil.move('./user/user.txt', './serve/') |
Để tránh lỗi này, hãy tạo thư mục đó nếu như nó chưa tồn tại, trước khi di chuyển file trong python, bằng cách sử dụng os.makedirs() như sau:
import shutil |
- Bạn có thể tìm hiểu thêm về cách sử dụng os.makedirs() trong python tại bài Tạo thư mục trong python.
Di chuyển và đổi tên file trong python
Ở phần trên chúng ta đã biết, khi chỉ định đối số dst
trong shutil.move() bằng một đường dẫn thư mục, tên file sẽ không đổi trước và sau khi di chuyển.
Nếu bạn muốn di chuyển file và đổi tên file đó thành một tên khác trong python, hãy chỉ định đối số dst
thành đường dẫn của file với tên file mới, giống như ví dụ sau đây:
import shutil |
Lưu ý, nếu như thư mục đích không tồn tại, lỗi cũng sẽ xảy ra. Hãy giải quyết lỗi như cách Kiyoshi đã chỉ ở trên.
Di chuyển file trong python khi thư mục đích đã có file khác cùng tên.
Trong trường hợp chúng ta muốn di chuyển một file mà ở thư mục đích, một file khác cùng tên đã tồn tại trước đó, nếu bạn dùng hệ điều hành Mac hay Linux, file ở thư mục đích sẽ bị ghi đè, còn nếu bạn dùng Windows, lỗi sau đây sẽ xảy ra:
shutil.Error: Destination path './client/user.txt' already exists |
Nếu bạn dùng Windows, để tránh lỗi xảy ra, bạn có thể xóa file cũ đi hoặc là đổi tên file đó trước khi tiến hành di chuyển file như sau:
import shutil |
Trong đó os.rename()
dùng để đổi tên file trong python và os.remove()
dùng để xóa file trong python.
Di chuyển toàn bộ file trong thư mục python
Để di chuyển toàn bộ file trong thư mục python sang một thư mục mới, chúng ta cần kết hợp Lấy danh sách tên file trong thư mục python và dùng lệnh for để di chuyển từng file sang thư mục mới.
Giả sử chúng ta có thư mục có cấu trúc như sau:
data/ ├── dir1 ├── dir2 │ ├── 123.txt │ ├── 789.txt │ ├── abc.txt │ └── dir3 ├── client └── move.py
Nếu chúng ta muốn chuyển toàn bộ file và thư mục trong thư mục dir2
sang thư mục dir
, hãy viết chương trình như sau:
src_dir = './dir2/' |
Chúng ta dùng os.listdir() để lấy danh sách toàn bộ tên file và thư mục chứa trong src_dir
và di chuyển từng đối tượng sang thư mục mới. Kết quả thư mục sẽ như sau:
data/ ├── dir1 │ ├── 123.txt │ ├── 789.txt │ ├── abc.txt │ └── dir3 ├── dir2 ├── client └── move.py
Trong trường hợp chúng ta chỉ muốn di chuyển file và giữ nguyên thư mục con hoặc ngược lại, hãy thêm lệnh kiểm tra đường dẫn là file hay thư mục vào chương trình như bằng cách sử dụng os.path.isfile() hoặc os.path.isdir() như sau:
src_dir = './dir2/' |
- Tham khảo cách sử dụng os.path.isfile() và os.path.isdir tại bài Cách kiểm tra đường dẫn là file hay thư mục
Tổng kết và thực hành
Trên đây Kiyoshi đã hướng dẫn bạn về cách di chuyển file trong python rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.
Và hãy cùng tìm hiểu những kiến thức sâu hơn về python trong các bài học tiếp theo.
URL Link
HOME › python cơ bản - lập trình python cho người mới bắt đầu>>16. xử lý file trong python