還在手動(dòng)算 KB、MB?一行代碼搞定文件大小格式化??!
在寫 Python 腳本的時(shí)候,我們經(jīng)常會(huì)遇到這樣的場(chǎng)景:
- 上傳文件,需要判斷文件大小是否超過限制;
- 讀取日志,想看看當(dāng)前文件有多大;
- 后臺(tái)管理系統(tǒng)中,展示用戶上傳的文件列表,需要一個(gè)清晰的文件大小顯示;
- 做數(shù)據(jù)清洗時(shí),判斷原始數(shù)據(jù)文件有多大,是否值得分析處理……
你打開文件一看,os.path.getsize() 給你返回一堆這樣的:
2048576
這是什么?多少 MB?多少 KB?你是不是還拿個(gè)計(jì)算器除以 1024?如果你還在顯示「字節(jié)數(shù)」,那真就太“低級(jí)”了!
那么問題來(lái)了:
如果遇到這種需求:獲取文件大小并展示為 "1.95 MB"、"3.2 GB",你會(huì)怎么處理?
今天就帶來(lái)一個(gè)高質(zhì)量、可復(fù)用、業(yè)務(wù)常用的工具函數(shù),讓你輕松搞定這個(gè)需求!
實(shí)用函數(shù):格式化文件大?。ㄖС謫挝磺袚Q)
import os
defget_file_size(path: str) -> str:
"""
獲取文件大小,并格式化為人類可讀的單位(KB/MB/GB)
:param path: 文件路徑
:return: 格式化后的文件大小字符串
"""
ifnot os.path.isfile(path):
return"文件不存在"
size = os.path.getsize(path) # 單位:字節(jié) B
units = ['B', 'KB', 'MB', 'GB', 'TB']
i = 0
while size >= 1024and i < len(units) - 1:
size /= 1024.0
i += 1
return f"{size:.2f} {units[i]}"
使用方式非常簡(jiǎn)單:
file_path = "test.zip"
print(get_file_size(file_path))
# 輸出:比如 2.35 MB
如果文件不存在,會(huì)提示“文件不存在”,避免程序直接報(bào)錯(cuò)。
背后原理講解
你看到的是一行函數(shù)調(diào)用,其實(shí)背后邏輯包含:
- 文件大小獲?。?nbsp;os.path.getsize(path) 返回的是字節(jié)(byte)單位;
- 格式化處理: 通過不斷除以 1024,轉(zhuǎn)換成合適的單位(比如 KB、MB、GB);
- 精度控制: 格式化為兩位小數(shù),展示更加美觀;
- 健壯性: 判斷文件是否存在,不存在直接返回提示;
實(shí)戰(zhàn)使用場(chǎng)景
你可以把這個(gè)函數(shù)加到任何項(xiàng)目中,提升用戶體驗(yàn):
使用場(chǎng)景 | 示例效果 |
管理后臺(tái)文件管理模塊 | 顯示“3.45 MB” |
下載頁(yè)面顯示進(jìn)度 | 顯示“已下載:58.76 MB / 1024 MB” |
上傳接口做大小限制 | 判斷是否超過 20MB |
統(tǒng)計(jì)磁盤文件夾大小 | 組合遞歸遍歷調(diào)用,格式化顯示 |
拓展建議:如何讓它更強(qiáng)?
你也可以基于這個(gè)基礎(chǔ)版本進(jìn)行擴(kuò)展,比如:
- 支持傳入單位(用戶想固定返回 KB)
- 支持目錄大小計(jì)算(遞歸文件夾所有文件總和)
- 多語(yǔ)言單位支持(B, KB, MB → 字節(jié)、千字節(jié)、兆字節(jié))
這樣一個(gè)小工具,作為工具函數(shù)庫(kù)中的一員,極大地提升了你的開發(fā)效率!
小結(jié)
文件大小的處理雖然是小細(xì)節(jié),但卻是很多用戶真正關(guān)注的“體驗(yàn)細(xì)節(jié)”。一個(gè)簡(jiǎn)潔、優(yōu)雅的展示,不僅減少了用戶的困惑,也提升了產(chǎn)品的專業(yè)感。
開發(fā)不只是完成功能,更是讓功能好用、好看、好維護(hù)!