基于Python实现文件大小输出


Posted in Python onJanuary 11, 2016

在数据库中存储时,使用 Bytes 更精确,可扩展性和灵活性都很高。

输出时,需要做一些适配。

1. 注意事项与测试代码

1.需要考虑 sizeInBytes 为 None 的场景。

2.除以 1024.0 而非 1024,避免丢失精度。

实现的函数为 getSizeInMb(sizeInBytes),通用的测试代码为

def getSizeInMb(sizeInBytes):
return 0
def test(sizeInBytes):
print '%s -> %s' % (sizeInBytes, getSizeInMb(sizeInBytes))
test(None)
test(0)
test(10240000)
test(1024*1024*10)

2. 以 MB 为单位输出 -- 返回 float

通常,电子书的大小在 1 - 50MB 之间,输出时统一转为 MB 是不错的选择。

弊端:

1.输出精度过高,比如 10240000 Bytes 计算结果为 10240000 -> 9.765625

2.文件大小有限制,小于 1 MB 或 G 级数据不适合该方式展示

优势:

1.适合于用返回值参与计算

def getSizeInMb(sizeInBytes):
return (sizeInBytes or 0) / (1024.0*1024.0)

3. 以 MB 为单位保留 1 位小数 -- 返回 str

处于精度问题考虑,可以选择保留 1 位小数。

def getSizeInMb(sizeInBytes):

return '%.1f' % ((sizeInBytes or 0) / (1024.0*1024.0), ) # use 1-dimension tuple is suggested

返回值建议写成 '%.1f' % (number,) 而非 '%.1f' % (number)

二者均能正确执行,但后者容易被误判为执行只有一个参数 number 的函数,导致难以判断的错误。

3. 以 MB 为单位保留至多 1 位小数 -- 返回 str

大多数操作系统一般展示至多 1 位小数

def getSizeInMb(sizeInBytes):
sizeInMb = '%.1f' % ((sizeInBytes or 0) / (1024.0*1024.0), ) # use 1-dimension tuple is suggested
return sizeInMb[:-2] if sizeInMb.endswith('.0') else sizeInMb # python2.5+ required

4. 自动选择最佳单位

def getSizeInNiceString(sizeInBytes):
"""
Convert the given byteCount into a string like: 9.9bytes/KB/MB/GB
"""
for (cutoff, label) in [(1024*1024*1024, "GB"),
(1024*1024, "MB"),
(1024, "KB"),
]:
if sizeInBytes >= cutoff:
return "%.1f %s" % (sizeInBytes * 1.0 / cutoff, label)
if sizeInBytes == 1:
return "1 byte"
else:
bytes = "%.1f" % (sizeInBytes or 0,)
return (bytes[:-2] if bytes.endswith('.0') else bytes) + ' bytes'

算法说明:

1. 从英语语法角度,只有 1 使用单数形式。其他 0/小数 均使用复数形式。涉及 bytes 级别

2. 精度方面,KB 及以上级别,保留 1 位小数。bytes 保留至多 1 位小数。

这种处理规则,不适合于小数十分位为 0 的情况,比如 10.0 bytes,10.01 bytes。输入结果均为 10 bytes。

其他情况下,精度均不存在问题。

测试数据与结果如下图

基于Python实现文件大小输出

以上内容给大家介绍了基于Python实现文件大小输出的相关知识,希望本文分享对大家有所帮助。

Python 相关文章推荐
python 生成目录树及显示文件大小的代码
Jul 23 Python
Python中对列表排序实例
Jan 04 Python
python实现堆栈与队列的方法
Jan 15 Python
轻松掌握python设计模式之策略模式
Nov 18 Python
使用python将mysql数据库的数据转换为json数据的方法
Jul 01 Python
Python 多线程,threading模块,创建子线程的两种方式示例
Sep 29 Python
pycharm新建Vue项目的方法步骤(图文)
Mar 04 Python
Python读入mnist二进制图像文件并显示实例
Apr 24 Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 Python
python如何进行矩阵运算
Jun 05 Python
python交互模式基础知识点学习
Jun 18 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
Feb 01 Python
详解Python发送邮件实例
Jan 10 #Python
python轻松查到删除自己的微信好友
Jan 10 #Python
如何处理Python3.4 使用pymssql 乱码问题
Jan 08 #Python
Python argv用法详解
Jan 08 #Python
详解Python爬虫的基本写法
Jan 08 #Python
黑科技 Python脚本帮你找出微信上删除你好友的人
Jan 07 #Python
星球大战与Python之间的那些事
Jan 07 #Python
You might like
APMServ使用说明
2006/10/23 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
puppeteer实现html截图的示例代码
2019/01/10 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
Python过滤列表用法实例分析
2016/04/29 Python
Python_LDA实现方法详解
2017/10/25 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
往来会计岗位职责
2013/12/19 职场文书
大学生职业生涯规划书模板
2014/01/18 职场文书
运动会标语
2014/06/21 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
工程进度款催款函
2015/06/24 职场文书
四大名著读书笔记
2015/06/25 职场文书
中学校园广播稿
2015/08/18 职场文书
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python
Django中celery的使用项目实例
2022/07/07 Python