基于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面相对象编程中对象的属性与类的方法
Jan 19 Python
Python 列表(List) 的三种遍历方法实例 详解
Apr 15 Python
TensorFlow模型保存和提取的方法
Mar 08 Python
Django框架的使用教程路由请求响应的方法
Jul 03 Python
Python pycharm 同时加载多个项目的方法
Jan 17 Python
python读写csv文件并增加行列的实例代码
Aug 01 Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 Python
Python Django实现layui风格+django分页功能的例子
Aug 29 Python
Python如何优雅删除字符列表空字符及None元素
Jun 25 Python
Python实现EM算法实例代码
Oct 04 Python
python中reload重载实例用法
Dec 15 Python
Python 的演示平台支持 WSGI 接口的应用
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
笑谈配置,使用Smarty技术
2007/01/04 PHP
php class类的用法详细总结
2013/10/17 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
网页中的图片的处理方法与代码
2009/11/26 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
jQuery动态修改超链接地址的方法
2015/02/13 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
Jquery-data的三种用法
2017/04/18 jQuery
本地存储localStorage用法详解
2017/07/31 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
Python列表append和+的区别浅析
2015/02/02 Python
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
python正则表达式的使用
2017/06/12 Python
Django项目实战之用户头像上传与访问的示例
2018/04/21 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
python实现画循环圆
2019/11/23 Python
tensorflow的计算图总结
2020/01/12 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
python实现双人五子棋(终端版)
2020/12/30 Python
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
2019年Java面试必问之经典试题
2012/09/12 面试题
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
国际商务专业学生个人的自我评价
2013/09/28 职场文书
大型会议接待方案
2014/03/01 职场文书
一文搞懂redux在react中的初步用法
2021/06/09 Javascript
Python标准库pathlib操作目录和文件
2021/11/20 Python