基于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中使用 Selenium 实现网页截图实例
Jul 18 Python
举例讲解Linux系统下Python调用系统Shell的方法
Nov 07 Python
python实现excel读写数据
Mar 02 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
详解爬虫被封的问题
Apr 23 Python
python2爬取百度贴吧指定关键字和图片代码实例
Aug 14 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
tensorflow使用range_input_producer多线程读取数据实例
Jan 20 Python
django model通过字典更新数据实例
Apr 01 Python
解决Python发送Http请求时,中文乱码的问题
Apr 30 Python
基于Python快速处理PDF表格数据
Jun 03 Python
python实现图片,视频人脸识别(dlib版)
Nov 18 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
搜索引擎技术核心揭密
2006/10/09 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
PDO::setAttribute讲解
2019/01/29 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
PHP标准库(PHP SPL)详解
2019/03/16 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
node.js中的require使用详解
2014/12/15 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
Python在线运行代码助手
2016/07/15 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
励志演讲稿500字
2014/08/21 职场文书
地方课程教学计划
2015/01/19 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python