基于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实现一个简单的线程池
Apr 07 Python
基于python 二维数组及画图的实例详解
Apr 03 Python
python3中获取文件当前绝对路径的两种方法
Apr 26 Python
python三方库之requests的快速上手
Mar 04 Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 Python
python使用time、datetime返回工作日列表实例代码
May 09 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
Python实现自动打开电脑应用的示例代码
Apr 17 Python
python中threading开启关闭线程操作
May 02 Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 Python
Python批量将csv文件转化成xml文件的实例
May 10 Python
Python序列化与反序列化相关知识总结
Jun 08 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
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
php截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
详解原生js实现offset方法
2017/06/15 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
Django进阶之CSRF的解决
2018/08/01 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
python try...finally...的实现方法
2020/11/25 Python
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
Html5导航栏吸顶方案原理与对比实现
2020/06/10 HTML / CSS
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
遗嘱公证书标准样本
2014/04/08 职场文书
2014年技术员工作总结
2014/11/18 职场文书
2015年新农合工作总结
2015/03/30 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
小程序wx.getUserProfile接口的具体使用
2021/06/02 Javascript
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技