基于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 使用pandas实现查询和统计示例详解

    Python 使用pandas实现查询和统计示例详解

    这篇文章主要为大家介绍了Python 使用pandas实现查询和统计示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • pycharm重命名文件的方法步骤

    pycharm重命名文件的方法步骤

    在本篇文章中小编给大家分享的是关于pycharm重命名文件的方法步骤,对此有需要的朋友们可以学习参考下。
    2019-07-07
  • 详解Python itertools模块中starmap函数的应用

    详解Python itertools模块中starmap函数的应用

    starmap是一个非常有用的函数,它属于itertools模块中的一部分,本文将详细介绍starmap函数的作用、用法以及实际应用场景,希望对大家有所帮助
    2024-03-03
  • Python爬取酷狗MP3音频的步骤

    Python爬取酷狗MP3音频的步骤

    这篇文章主要介绍了Python爬取酷狗MP3音频的步骤,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-02-02
  • 用Python爬取英雄联盟的皮肤详细示例

    用Python爬取英雄联盟的皮肤详细示例

    大家好,本篇文章主要讲的是用Python爬取英雄联盟的皮肤详细示例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • wxPython窗口中文乱码解决方法

    wxPython窗口中文乱码解决方法

    这篇文章主要介绍了wxPython窗口中文乱码解决方法,在Python程序设计中比较常见,是非常实用的技巧,需要的朋友可以参考下
    2014-10-10
  • Python实现Linux的find命令实例分享

    Python实现Linux的find命令实例分享

    本文给大家分享的是使用python简单实现模拟linux的find命令的实例代码,推荐给大家,希望大家能够喜欢
    2017-06-06
  • python中文字符如何转url编码

    python中文字符如何转url编码

    这篇文章主要介绍了python中文字符如何转url编码问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • pytorch __init__、forward与__call__的用法小结

    pytorch __init__、forward与__call__的用法小结

    这篇文章主要介绍了pytorch __init__、forward与__call__的用法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Python变量访问权限控制详解

    Python变量访问权限控制详解

    这篇文章主要介绍了Python变量访问权限控制详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06

最新评论