基于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实现ssh批量登录并执行命令
Oct 25 Python
pyqt5自定义信号实例解析
Jan 31 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 Python
Python Numpy库安装与基本操作示例
Jan 08 Python
Python3字符串encode与decode的讲解
Apr 02 Python
在python中实现调用可执行文件.exe的3种方法
Jul 07 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
基于Python实现大文件分割和命名脚本过程解析
Sep 29 Python
用Python绘制漫步图实例讲解
Feb 26 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
Python selenium绕过webdriver监测执行javascript
Apr 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使之能同时支持GIF和JPEG
2006/10/09 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
利用php生成验证码
2017/02/23 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
js打印纸函数代码(递归)
2010/06/18 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
JavaScript cookie的设置获取删除详解
2014/02/11 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
jQuery设置指定网页元素宽度和高度的方法
2015/03/25 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
node.js实现快速截图
2016/08/27 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
python实现石头剪刀布小游戏
2021/01/20 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
简单了解python的内存管理机制
2019/07/08 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
python 字符串常用方法汇总详解
2019/09/16 Python
python zip()函数使用方法解析
2019/10/31 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
C面试题
2015/10/08 面试题
店长岗位职责
2015/02/11 职场文书
北京导游词
2015/02/12 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
卡特教练观后感
2015/06/08 职场文书
医院病假条范文
2015/08/17 职场文书
决心书格式范文
2015/09/23 职场文书
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS