title用法 - 如何检查在Python中的文件大小?




subplot title (5)

严格坚持这个问题,python代码(+伪代码)将是:

import os
file_path = r"<path to your file>"
if os.stat(file_path).st_size > 0:
    <send an email to somebody>
else:
    <continue to other things>

我正在Windows中编写一个Python脚本。 我想根据文件大小做一些事情。 例如,如果大小大于0,我会发送电子邮件给某人,否则继续其他事情。

如何检查文件大小?


使用os.path.getsize

>>> import os
>>> b = os.path.getsize("/path/isa_005.mp3")
>>> b
2071611L

输出以字节为单位。


其他答案适用于真实文件,但如果您需要某些适用于“类文件对象”的内容,请尝试以下操作:

# f is a file-like object. 
f.seek(0, os.SEEK_END)
size = f.tell()

它适用于真正的文件和StringIO,在我的有限测试中。 (Python 2.7.3。)当然,“类文件对象”API并不是真正的严格界面,但API文档建议文件类对象应该支持seek()tell()

编辑

这个和os.stat()之间的另一个区别是,即使你没有读权限,你也可以stat()一个文件。 除非您拥有阅读权限,否则显然这种寻求/告知方法无效。

编辑2

在Jonathon的建议下,这是一个偏执狂的版本。 (上面的版本将文件指针留在文件的末尾,所以如果你想从文件读取数据,你会得到零字节!)

# f is a file-like object. 
old_file_position = f.tell()
f.seek(0, os.SEEK_END)
size = f.tell()
f.seek(old_file_position, os.SEEK_SET)

如果我想从bytes转换为任何其他单位,我使用一个bitshift技巧。 如果你做10右移,你基本上是通过一个订单(多个)来移动它。

例如: 5GB are 5368709120 bytes

print (5368709120 >> 10)  # 5242880 kilo Bytes (kB)
print (5368709120 >> 20 ) # 5120 Mega Bytes(MB)
print (5368709120 >> 30 ) # 5 Giga Bytes(GB)

import os


def convert_bytes(num):
    """
    this function will convert bytes to MB.... GB... etc
    """
    for x in ['bytes', 'KB', 'MB', 'GB', 'TB']:
        if num < 1024.0:
            return "%3.1f %s" % (num, x)
        num /= 1024.0


def file_size(file_path):
    """
    this function will return the file size
    """
    if os.path.isfile(file_path):
        file_info = os.stat(file_path)
        return convert_bytes(file_info.st_size)


# Lets check the file size of MS Paint exe 
# or you can use any file path
file_path = r"C:\Windows\System32\mspaint.exe"
print file_size(file_path)

结果:

6.1 MB




python