如何检查在Python中的文件大小?
我正在Windows中编写一个Python脚本。 我想根据文件大小做一些事情。 例如,如果大小大于0,我将发送电子邮件给某人,否则继续其他事情。
如何检查文件大小?
使用os.stat
,并使用结果对象的st_size
成员:
>>> import os >>> statinfo = os.stat('somefile.txt') >>> statinfo (33188, 422511L, 769L, 1, 1032, 100, 926L, 1105022698,1105022732, 1105022732) >>> statinfo.st_size 926L
输出以字节为单位。
像这样(信用http://www.daniweb.com/forums/thread78629.html ):
>>> 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的,在我有限的testing。 (Python 2.7.3。)“类文件对象”API当然不是一个严格的接口,但API文档build议类文件对象应该支持seek()
和tell()
。
编辑
这个和os.stat()
之间的另一个区别是,即使你没有权限读取它,你也可以stat()
一个文件。 除非你有阅读权限,否则寻求/告诉的方法显然是行不通的。
编辑2
乔纳森的build议,这是一个偏执狂的版本。 (上面的版本将文件指针留在文件末尾,所以如果你想从文件中读取,你会得到零字节!)
# 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)
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上可用)…
from pathlib import Path file = Path() / 'doc.txt' # or Path('./doc.txt') size = file.stat().st_size
这实际上只是os.stat
一个接口,但是使用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>