如何在Python中获取文件的大小?
当前回答
其他答案适用于实际文件,但如果你需要一些适用于“类文件对象”的东西,试试这个:
# f is a file-like object.
f.seek(0, os.SEEK_END)
size = f.tell()
在我有限的测试中,它适用于真实的文件和StringIO。(Python 2.7.3。)当然,“类文件对象”API并不是一个严格的接口,但是API文档建议类文件对象应该支持seek()和tell()。
Edit
这和os.stat()之间的另一个区别是,即使你没有读取权限,你也可以stat()一个文件。显然,除非您有读取权限,否则seek/tell方法将不起作用。
编辑2
根据乔纳森的建议,这是一个偏执的版本。(上面的版本将文件指针留在文件的末尾,所以如果你试图从文件中读取,你将得到零字节!)
# 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)
其他回答
你可以使用os模块中的stat()方法。您可以为它提供字符串、字节甚至PathLike对象形式的路径。它也适用于文件描述符。
import os
res = os.stat(filename)
res.st_size # this variable contains the size of the file in bytes
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
使用pathlib(在Python 3.4或PyPI上可用的backport中添加):
from pathlib import Path
file = Path() / 'doc.txt' # or Path('./doc.txt')
size = file.stat().st_size
这实际上只是一个围绕os的界面。但是使用pathlib提供了一种访问其他文件相关操作的简单方法。
严格地坚持这个问题,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>
其他答案适用于实际文件,但如果你需要一些适用于“类文件对象”的东西,试试这个:
# f is a file-like object.
f.seek(0, os.SEEK_END)
size = f.tell()
在我有限的测试中,它适用于真实的文件和StringIO。(Python 2.7.3。)当然,“类文件对象”API并不是一个严格的接口,但是API文档建议类文件对象应该支持seek()和tell()。
Edit
这和os.stat()之间的另一个区别是,即使你没有读取权限,你也可以stat()一个文件。显然,除非您有读取权限,否则seek/tell方法将不起作用。
编辑2
根据乔纳森的建议,这是一个偏执的版本。(上面的版本将文件指针留在文件的末尾,所以如果你试图从文件中读取,你将得到零字节!)
# 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)
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if
- 如何在Python中获得所有直接子目录