基于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单元测试框架unittest使用方法讲解
Apr 13 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
Aug 12 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
Sep 18 Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 Python
基于plt.title无法显示中文的快速解决
May 16 Python
python集合能干吗
Jul 19 Python
python动态规划算法实例详解
Nov 22 Python
Python实现随机爬山算法
Jan 29 Python
python 基于pygame实现俄罗斯方块
Mar 02 Python
python requests模块的使用示例
Apr 07 Python
Python数据分析之绘图和可视化详解
Jun 02 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网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
php绘制一条弧线的方法
2015/01/24 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
jQuery代码优化之基本事件
2011/11/01 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
vue下拉列表功能实例代码
2018/04/08 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
解密Python中的描述符(descriptor)
2015/06/03 Python
Python 多线程实例详解
2017/03/25 Python
Python如何发布程序的详细教程
2018/10/09 Python
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
销售自我评价
2013/10/22 职场文书
总经理助理的职责
2014/03/14 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
学校党的群众路线教育实践活动总结材料
2014/10/30 职场文书
MongoDB 常用的crud操作语句
2021/06/20 MongoDB
利用js实现简单开关灯代码
2021/11/23 Javascript
python超详细实现完整学生成绩管理系统
2022/03/17 Python