6.1 Làm việc với tệp
Python cung cấp nhiều hàm và module tích hợp sẵn để làm việc với
tệp và thư mục. Các thao tác chính được thực hiện với việc sử dụng
các module tích hợp os
, shutil
và những thứ khác.
Ba thao tác chính với tệp:
- Sao chép
- Di chuyển
- Xóa
Để thực hiện chúng, module shutil
là lý tưởng.
Sao chép tệp
import shutil
shutil.copy('source.txt', 'destination.txt')
Di chuyển tệp
import shutil
shutil.move('source.txt', 'destination.txt')
Xóa tệp
import os
os.remove('example.txt')
Dễ hiểu hơn bao giờ hết.
6.2 Kiểm tra sự tồn tại của tệp
Rất thường xuyên cần kiểm tra xem một tệp nhất định có tồn tại hay không.
Để làm điều này, module os
có một phương thức đặc biệt —
exists()
.
Kiểm tra sự tồn tại của tệp
import os
if os.path.exists('example.txt'):
print("File tồn tại")
else:
print("File không tồn tại")
# Nếu file không tồn tại, chương trình sẽ thực hiện hành động được mô tả trong khối else.
# Ví dụ, có thể xuất cảnh báo, tạo một tệp mới hoặc thoát khỏi chương trình.
Nếu tệp không tồn tại, chương trình có thể xử lý điều này bằng điều kiện hoặc ném ra một ngoại lệ.
6.3 Kiểm tra loại đối tượng: tệp hoặc thư mục
Rất thường xuyên cần kiểm tra xem đối tượng có phải là tệp hay thư mục không. Ví dụ, nếu bạn đang đọc toàn bộ nội dung của thư mục và tệp cần xử lý từng cái một, còn thư mục thì theo cách khác.
Đối với các trường hợp như vậy, có hai phương thức đặc biệt — isdir()
, phương thức kiểm tra xem đối tượng có phải là thư mục không, và isfile()
, phương thức kiểm tra xem đối tượng có phải là tệp không.
Kiểm tra — đây có phải là thư mục không
if os.path.isdir('example_directory'):
print("Đây là thư mục")
else:
print("Đây không phải là thư mục")
Kiểm tra — đây có phải là tệp không
if os.path.isfile('example_file'):
print("Đây là file")
else:
print("Đây không phải là file")
Đây là những hàm rất hữu ích mà bạn sẽ sử dụng thường xuyên hơn bạn nghĩ. :)
6.4 Làm việc với đường dẫn
Module os
có một module con là os.path
,
chứa các hàm hữu ích để làm việc với tệp và thư mục. Dưới đây là
một số trong chúng:
Nhận phần mở rộng của tệp
Hàm splitext()
chia tên tệp thành hai phần và
trả về danh sách gồm hai phần tử: tên và phần mở rộng.
import os.path
# Nhận phần mở rộng của tệp
file_path = 'example.txt'
file_extension = os.path.splitext(file_path)[1]
print(f"Phần mở rộng của tệp: {file_extension}")
Nhận tên tệp không có phần mở rộng
import os.path
# Nhận tên tệp mà không có phần mở rộng
file_path = 'example.txt'
file_name = os.path.splitext(os.path.basename(file_path))[0]
print(f"Tên tệp không có phần mở rộng: {file_name}")
Nhận tên tệp từ đường dẫn
Hàm basename()
chỉ trả về tên tệp, cắt bỏ
toàn bộ đường dẫn dẫn đến nó.
import os.path
# Nhận tên tệp từ đường dẫn
file_path = '/path/to/example.txt'
file_name = os.path.basename(file_path)
print(f"Tên tệp: {file_name}")
Nhận thư mục từ đường dẫn
Các bạn cũng có thể dễ dàng chỉ nhận được thư mục từ tên tệp bằng
hàm dirname()
.
import os.path
# Nhận thư mục từ đường dẫn
file_path = '/path/to/example.txt'
directory = os.path.dirname(file_path)
print(f"Thư mục: {directory}")
Kết hợp đường dẫn
Nếu bạn có thư mục riêng và tên tệp riêng, bạn có thể nhận được đường dẫn đầy đủ đến tệp đó.
import os.path
# Kết hợp đường dẫn
directory = '/path/to'
file_name = 'example.txt'
full_path = os.path.join(directory, file_name)
print(f"Đường dẫn đầy đủ: {full_path}")
6.5 Đường dẫn không phụ thuộc nền tảng
Khi làm việc với đường dẫn, quan trọng là phải cân nhắc sự khác biệt giữa các hệ điều hành. Các dấu phân cách đường dẫn có thể khác nhau, và mã mà hoạt động trên một nền tảng có thể không hoạt động trên một nền tảng khác. Để tránh các vấn đề khi chuyển mã giữa các hệ điều hành khác nhau, sử dụng các hàm os.path.join()
, os.path.abspath()
và os.path.dirname()
, những hàm này đảm bảo tính tương thích với các nền tảng khác nhau.
Ví dụ:
import os
# Kết hợp đường dẫn một cách không phụ thuộc nền tảng
directory = 'some_directory'
file_name = 'example.txt'
full_path = os.path.join(directory, file_name)
print(f"Đường dẫn đầy đủ: {full_path}")
Nhận đường dẫn tuyệt đối
Nếu bạn chỉ có đường dẫn tương đối đối với thư mục làm việc hiện tại, nhưng bạn
muốn chuyển đổi nó thành đường dẫn tuyệt đối, có
hàm abspath()
.
import os.path
# Nhận đường dẫn tuyệt đối
relative_path = 'example.txt'
absolute_path = os.path.abspath(relative_path)
print(f"Đường dẫn tuyệt đối: {absolute_path}")
Quan trọng!
Luôn sử dụng các hàm hệ thống
khi làm việc với đường dẫn, vì mã của bạn có thể được chạy trên một hệ điều hành khác
nơi không có dấu phân cách tệp \
, mà là /
, hoặc nơi cấm «:»
trong đường dẫn hoặc
điều gì đó khác.
GO TO FULL VERSION