基于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通过BF算法实现关键词匹配的方法
Mar 13 Python
Python机器学习之决策树算法实例详解
Dec 06 Python
Python有序查找算法之二分法实例分析
Dec 11 Python
python快速建立超简单的web服务器的实现方法
Feb 17 Python
Python for循环生成列表的实例
Jun 15 Python
python之cv2与图像的载入、显示和保存实例
Dec 05 Python
python实现支付宝转账接口
May 07 Python
Python 常用模块 re 使用方法详解
Jun 06 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
Python多版本开发环境管理工具介绍
Jul 03 Python
pandas进行时间数据的转换和计算时间差并提取年月日
Jul 06 Python
python实现大文本文件分割成多个小文件
Apr 20 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
9个PHP开发常用功能函数小结
2011/07/15 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
jquery $.ajax入门应用一
2008/11/19 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
JavaScript 学习笔记之基础中的基础
2015/01/13 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
python私有属性和方法实例分析
2015/01/15 Python
python自动裁剪图像代码分享
2017/11/25 Python
python编程嵌套函数实例代码
2018/02/11 Python
Django 开发环境配置过程详解
2019/07/18 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
如何基于Python实现数字类型转换
2020/02/07 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
毕业求职自荐信格式是什么
2013/11/19 职场文书
一年级班主任寄语
2014/01/19 职场文书
社区食品安全实施方案
2014/03/28 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
技术员岗位职责范本
2015/04/11 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL