基于Python实现文件大小输出

 更新时间:2016年01月11日 09:04:59   作者:jerrylsxu  
在数据库中存储时,使用 Bytes 更精确,可扩展性和灵活性都很高。下面通过本文给大家介绍基于Python实现文件大小输出,对python文件输出相关知识感兴趣的朋友一起学习吧

在数据库中存储时,使用 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 布尔类型示例精讲,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Django框架模板用法详解

    Django框架模板用法详解

    本文详细讲解了Django框架中模板的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 关于python的第三方库下载与更改方式

    关于python的第三方库下载与更改方式

    这篇文章主要介绍了关于python的第三方库下载与更改方式,使用python的朋友都知道python有很多非常方便的第三方库可以使用,那么如果下载这些第三方库呢,今天小编就带你们来看看
    2023-04-04
  • Python Pandas 转换unix时间戳方式

    Python Pandas 转换unix时间戳方式

    今天小编就为大家分享一篇Python Pandas 转换unix时间戳方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python+OpenCV实战之拖拽虚拟方块的实现

    Python+OpenCV实战之拖拽虚拟方块的实现

    这篇文章主要介绍了如何利用Python+OpenCV实现拖拽虚拟方块的效果,即根据手指坐标位置和矩形的坐标位置,判断手指点是否在矩形上,如果在则矩形跟随手指移动,感兴趣的可以了解一下
    2022-08-08
  • Python从入门到实战之数据结构篇

    Python从入门到实战之数据结构篇

    数据结构中有很多树的结构,其中包括二叉树、二叉搜索树、2-3树、红黑树等等。本文中对数据结构进行了总结,不求严格精准,但求简单易懂
    2021-11-11
  • python使用正则表达式(Regular Expression)方法超详细

    python使用正则表达式(Regular Expression)方法超详细

    这篇文章主要介绍了python使用正则表达式(Regular Expression)方法超详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Python利用装饰器click处理解析命令行参数

    Python利用装饰器click处理解析命令行参数

    这篇文章主要为大家详细介绍了Python如何利用装饰器click实现处理解析命令行参数功能,文中的示例代码简洁易懂,需要的小伙伴快跟随小编一起了解一下
    2022-10-10
  • Python多版本安装与Jupyter Lab使用方式

    Python多版本安装与Jupyter Lab使用方式

    这篇文章主要介绍了Python多版本安装与Jupyter Lab使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 在Linux系统上安装Python的Scrapy框架的教程

    在Linux系统上安装Python的Scrapy框架的教程

    这篇文章主要介绍了在Linux系统上安装Python的Scrapy框架的教程,Scrapy是著名的专门针对搜索引擎的爬虫制作而研发的Python框架,需要的朋友可以参考下
    2015-06-06

最新评论