基于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通过scapy获取局域网所有主机mac地址示例
May 04 Python
跟老齐学Python之复习if语句
Oct 02 Python
Python使用multiprocessing创建进程的方法
Jun 04 Python
Python、PyCharm安装及使用方法(Mac版)详解
Apr 28 Python
详解python中list的使用
Mar 15 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
用Python爬取QQ音乐评论并制成词云图的实例
Aug 24 Python
python 的topk算法实例
Apr 02 Python
Python scrapy爬取小说代码案例详解
Jul 09 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
python文件排序的方法总结
Sep 13 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 5.0对象模型深度探索之绑定
2006/09/05 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
node.js入门教程
2014/06/01 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
JavaScript获取文本框内选中文本的方法
2015/02/20 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
python 判断一个进程是否存在
2009/04/09 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
python实现flappy bird游戏
2018/12/24 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
python如何删除列为空的行
2020/07/17 Python
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
介绍一下游标
2012/01/10 面试题
参观监狱心得体会
2014/01/02 职场文书
一份婚庆公司创业计划书
2014/01/11 职场文书
大学四年的个人自我评价
2014/01/14 职场文书