一、os模塊計算文件大小
import os
def get_file_size(file_path):
# get size of the file in bytes
size = os.path.getsize(file_path)
# convert size to KB, MB, GB etc.
suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']
index = 0
while size > 1024:
size = size / 1024
index += 1
return f"{size:.2f} {suffixes[index]}"
file_path = "test.txt"
file_size = get_file_size(file_path)
print(f"Size of file {file_path}: {file_size}")
在Python中使用os模塊可以很容易地計算文件大小。os.path.getsize()方法可以直接計算出文件的大小,單位是位元組(bytes)。為了讓文件大小的顯示更加方便,我們可以將其換算成常用的KB、MB、GB和TB。
代碼中,我們定義了一個函數get_file_size(file_path),其中傳入的參數是文件路徑。在函數內部,我們先使用os.path.getsize()獲取文件大小,然後通過一個while循環將文件大小轉換成更加直觀的單位。
二、humanize模塊顯示文件大小
import humanize
file_path = "test.txt"
file_size = os.path.getsize(file_path)
print(f"Size of file {file_path}: {humanize.naturalsize(file_size)}")
為了讓文件大小的顯示更加易讀,Python還提供了humanize庫,該庫提供了很多函數可以將數字轉換成直觀的單位。
在上面的代碼中,我們使用humanize.naturalsize()函數將文件大小轉換成比較好讀的單位。該函數支持自動轉換單位,因此不必手動進行單位轉換。
三、遞歸計算目錄大小
def get_dir_size(start_path='.'):
total_size = 0
with os.scandir(start_path) as it:
for entry in it:
if entry.is_file():
total_size += entry.stat().st_size
elif entry.is_dir():
total_size += get_dir_size(entry.path)
return total_size
dir_path = "/Users/username/Downloads"
dir_size = get_dir_size(dir_path)
print(f"Size of directory {dir_path}: {humanize.naturalsize(dir_size)}")
除了計算單個文件大小,我們還可以計算整個目錄的大小。對於含有大量文件的目錄,遞歸計算所有文件的大小可能會非常耗時。因此,我們應該使用os.scandir()函數來遍歷整個目錄,並使用遞歸的方式計運算元目錄的大小。
在上面的代碼中,我們定義了一個函數get_dir_size(start_path)。函數接受一個參數start_path,該參數指定要計算大小的目錄。在函數內部,我們使用os.scandir()函數遍歷目錄中的所有條目,並使用if語句對文件和目錄進行區分。如果是文件,我們直接獲取文件大小並累加到total_size中;如果是目錄,我們遞歸調用get_dir_size()函數來計算該子目錄的大小。
四、總結
通過os模塊和humanize模塊,我們可以方便地在Python中計算文件和目錄大小。在實際工作中,我們可以結合操作系統的命令行工具和Python腳本來方便地管理文件和目錄。
值得一提的是,humanize模塊還提供了很多其他的函數,如將時間轉換成易讀的形式等。在實際編程中,我們可以根據需求選擇合適的函數來簡化開發。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/279728.html