基于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中的__new__、__init__、__call__三个特殊方法
Jun 02 Python
TensorFlow实现Softmax回归模型
Mar 09 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 Python
使用python实现mqtt的发布和订阅
May 05 Python
react+django清除浏览器缓存的几种方法小结
Jul 17 Python
python对XML文件的操作实现代码
Mar 27 Python
pip install 使用国内镜像的方法示例
Apr 03 Python
Python判断三段线能否构成三角形的代码
Apr 12 Python
Python telnet登陆功能实现代码
Apr 16 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 Python
如何在windows下安装配置python工具Ulipad
Oct 27 Python
python实现发送QQ邮件(可加附件)
Dec 23 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
星际争霸任务指南——虫族
2020/03/04 星际争霸
PHP session常见问题集锦及解决办法总结
2007/03/18 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
js实现星星打分效果的方法
2020/07/05 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
老生常谈JavaScript中的this关键字
2016/10/01 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
python实现简单的五子棋游戏
2020/09/01 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
会计与审计专业自荐信范文
2014/03/15 职场文书
微电影大赛策划方案
2014/06/05 职场文书
办公室文员岗位职责
2015/02/04 职场文书
中学图书馆工作总结
2015/08/11 职场文书
Golang的继承模拟实例
2021/06/30 Golang
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript