如何检查在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>