Lấy kích thước file và thư mục trong python | Laptrinhcanban.com

Lấy kích thước file và thư mục trong python

Hướng dẫn cách lấy kích thước file và thư mục trong python. Bạn sẽ học được cách lấy kích thước file trong python bằng hàm os.path.getsize() cũng như kết hợp với các hàm os.scandir() và os.listdir() để lấy kích thước thư mục trong python sau bài học này.

Lấy kích thước file trong ptyhon | os.path.getsize()

Để lấy kích thước một file đã tồn tại trong ptyhon, chúng ta sử dụng hàm os.path.getsize() trong module os, với cú pháp sau đây:

os.path.getsize(path)

Trong đó path là đường dẫn của file cần lấy kích thước. Kết quả trả về sẽ là kích thước file với đơn vị KB như sau:

import os

filesize=os.path.getsize('data/kiyoshi.png')
print(filesize,"KB")
# 911504 KB

Để lấy kết quả kích thước file với đơn vị khác, ví dụ như là GB, chúng ta chia kết quả với hệ số là xong.

import os
gb = 1024 ** 3
filesize_gb=round(os.path.getsize('data/kiyoshi.png')/gb,4)
print(filesize_gb,"GB")
# 0.0185 GB

Nếu file đó không tồn tại hoặc không thể truy cập, lỗi OSError sẽ xảy ra:

OSError: File not found

Lấy kích thước thư mục trong python | os.scandir()

Ứng dụng hàm os.path.getsize() và kết hợp với hàm os.scandir(), chúng ta có thể lấy kích thước thư mục trong python bằng cách tính tổng kích thước tất cả các file có trong thư mục đó, với chương trình sau đây:

import os
def get_dir_size(path='.'):
total = 0
with os.scandir(path) as it:
for entry in it:
if entry.is_file():
total += entry.stat().st_size
elif entry.is_dir():
total += get_dir_size(entry.path)
return total

print(get_dir_size('data/src'))
# 3379

Trong mã mẫu, chúng ta tạo ra một trình lặp (Iterator) từ hàm os.scandir(), sau đó với mỗi đường dẫn entry lấy ra từ trình lặp, chúng ta sẽ kiểm tra đó là file hay thư mục con, và tùy vào đó để tiến hành lấy thuộc tính stat().st_size - kích thước của file để cộng vào biến tổng kích thước total.

Nếu như bạn chỉ muốn lấy tổng kích thước các file nằm trực tiếp dưới thư mục đó mà không lấy tất cả các file trong thư mục con một cách đệ quy, hãy xóa dòng code dưới đây trong mã lệnh là xong:

elif entry.is_dir():
total += get_dir_size(entry.path)

Lấy kích thước thư mục trong python | os.isdir()

Trong các phiên bản Python3.4 về trước, do không tồn tại hàm os.scandir() nên chúng ta phải dùng kết hợp hàm os.isdir() để lấy kích thước thư mục, với mã lệnh sau đay:

def get_dir_size_old(path='.'):
total = 0
for p in os.listdir(path):
full_path = os.path.join(path, p)
if os.path.isfile(full_path):
total += os.path.getsize(full_path)
elif os.path.isdir(full_path):
total += get_dir_size_old(full_path)
return total

print(get_dir_size_old('data/src'))

Cách sử dụng thì tương tự như với ở phần trên, và bạn có thể chọn một trong hai kiểu để lấy kích thước thư mục trong python. Tuy nhiên cách dùng os.scandir() thì mới hơn nên nó có thể có nhiều ưu điểm hơn với cách sử dụng cũ, nên Kiyoshi khuyên bạn nên dùng hàm os.scandir() hơn khi muốn lấy kích thước thư mục trong python.

Tổng kết và thực hành

Trên đây Kiyoshi đã hướng dẫn bạn về cách lấy kích thước file và thư mục 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.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.