基于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 26 Python
Python实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
简单的Python的curses库使用教程
Apr 11 Python
python3实现暴力穷举博客园密码
Jun 19 Python
python实现媒体播放器功能
Feb 11 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
Python神奇的内置函数locals的实例讲解
Feb 22 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
python web框架中实现原生分页
Sep 08 Python
python pycharm的安装及其使用
Oct 11 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
Mar 12 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判断所处服务器操作系统的类型
2013/06/20 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
jquery 使用点滴函数代码
2011/05/20 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
javascript复制粘贴与clipboardData的使用
2014/10/16 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
python使用scrapy解析js示例
2014/01/23 Python
跟老齐学Python之变量和参数
2014/10/10 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
详解Python中的动态属性和特性
2018/04/07 Python
django Serializer序列化使用方法详解
2018/10/16 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
详解python如何引用包package
2020/06/07 Python
小学生自我鉴定
2013/10/12 职场文书
大型车展策划方案
2014/02/01 职场文书
主题班会演讲稿
2014/05/22 职场文书
服务口号大全
2014/06/11 职场文书
小学生环保标语
2014/06/13 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
怎样写好工作计划
2019/04/10 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python