基于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通过zlib实现压缩与解压字符串的方法
Nov 19 Python
简要讲解Python编程中线程的创建与锁的使用
Feb 28 Python
python中的字典使用分享
Jul 31 Python
python 写入csv乱码问题解决方法
Oct 23 Python
Python生成密码库功能示例
May 23 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
Jan 24 Python
python下解压缩zip文件并删除文件的实例
Apr 24 Python
python3将视频流保存为本地视频文件
Jun 20 Python
Python Process多进程实现过程
Oct 22 Python
Python csv文件的读写操作实例详解
Nov 19 Python
Python如何重新加载模块
Jul 29 Python
Python使用BeautifulSoup4修改网页内容
May 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
PHP的开发框架的现状和展望
2007/03/16 PHP
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
php中url函数介绍及使用示例
2014/02/13 PHP
PHP实现生成唯一会员卡号
2015/08/24 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
动态表格Table类的实现
2009/08/26 Javascript
JavaScript 原型链学习总结
2010/10/29 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
在Python中使用Mako模版库的简单教程
2015/04/08 Python
Python计时相关操作详解【time,datetime】
2017/05/26 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
自荐信模版
2013/10/24 职场文书
水污染治理专业毕业生推荐信
2013/11/14 职场文书
工作违纪检讨书
2014/02/17 职场文书
党的群众路线学习材料
2014/05/16 职场文书
六查六看自查报告
2014/10/14 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
简单了解 MySQL 中相关的锁
2021/05/25 MySQL
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle
python热力图实现的完整实例
2022/06/25 Python