基于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 相关文章推荐
github配置使用指南
Nov 18 Python
详解Python迭代和迭代器
Mar 28 Python
Windows中安装使用Virtualenv来创建独立Python环境
May 31 Python
基于数据归一化以及Python实现方式
Jul 11 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
python实现括号匹配的思路详解
Aug 23 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
python 中pyqt5 树节点点击实现多窗口切换问题
Jul 04 Python
python读取word 中指定位置的表格及表格数据
Oct 23 Python
Python 代码调试技巧示例代码
Aug 11 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 Python
Selenium浏览器自动化如何上传文件
Apr 06 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
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
对PHP新手的一些建议(PHP学习经验总结)
2014/08/20 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
jQuery使用Layer弹出层插件闪退问题
2016/12/22 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python删除windows垃圾文件的方法
2015/07/14 Python
详解python中的json的基本使用方法
2016/12/21 Python
python中map()函数的使用方法示例
2017/09/29 Python
python入门教程 python入门神图一张
2018/03/05 Python
python实现大文本文件分割
2019/07/22 Python
解决Django中checkbox复选框的传值问题
2020/03/31 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
strstr()的简单实现
2013/09/26 面试题
入党积极分子介绍信
2014/01/17 职场文书
酒店值班经理的工作职责范本
2014/02/18 职场文书
安全生产中长期规划实施方案
2014/02/21 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
2015年仓管员工作总结
2015/04/21 职场文书