Answers:
您需要由返回的对象的st_size
属性。您可以使用(Python 3.4+)来获取它:os.stat
pathlib
>>> from pathlib import Path
>>> Path('somefile.txt').stat()
os.stat_result(st_mode=33188, st_ino=6419862, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=1564, st_atime=1584299303, st_mtime=1584299400, st_ctime=1584299400)
>>> Path('somefile.txt').stat().st_size
1564
或使用os.stat
:
>>> import os
>>> os.stat('somefile.txt')
os.stat_result(st_mode=33188, st_ino=6419862, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=1564, st_atime=1584299303, st_mtime=1584299400, st_ctime=1584299400)
>>> os.stat('somefile.txt').st_size
1564
输出以字节为单位。
stat_result.st_blocks
块大小,但是我仍在搜索如何以编程方式和跨平台获取它(而不是通过其他tune2fs
方式获取)
>>> import os
>>> b = os.path.getsize("/path/isa_005.mp3")
>>> b
2071611
输出以字节为单位。
os.path.getsize
很简单return os.stat(filename).st_size
os.stat
。然后差异可能会达到相当大的微秒数:-)
其他答案适用于实际文件,但是如果您需要适用于“类文件的对象”的文件,请尝试以下操作:
# 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
在乔纳森的建议下,这是一个偏执的版本。(以上版本将文件指针留在文件的末尾,因此,如果您尝试从文件中读取文件,则将返回零字节!)
# 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
,而是f.seek(0, 2)
从末尾写入以查找0个字节。
os
不使用的话:f.seek(old_file_position, 0)
os
。
size
输出是以字节为单位?
#seek()
:wiki.sei.cmu.edu/confluence/display/c/…–
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
return f'{num:.1f} {x}'
在Python> = 3.5中更改为。
使用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
提供了一种访问其他文件相关操作的简便方法。
bitshift
如果要从转换bytes
为任何其他单位,有一个技巧。如果您进行右移,则10
基本上是按一个顺序(多个)进行移位。
例:
5GB are 5368709120 bytes
print (5368709120 >> 10) # 5242880 kilobytes (kB)
print (5368709120 >> 20 ) # 5120 megabytes (MB)
print (5368709120 >> 30 ) # 5 gigabytes (GB)
严格遵循这个问题,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>
#Get file size , print it , process it...
#Os.stat will provide the file size in (.st_size) property.
#The file size will be shown in bytes.
import os
fsize=os.stat('filepath')
print('size:' + fsize.st_size.__str__())
#check if the file size is less than 10 MB
if fsize.st_size < 10000000:
process it ....
我们有两个选择都包括导入os模块
1)作为os.stat()函数导入os返回一个对象,该对象包含许多标头,包括文件创建时间和上次修改时间等。其中st_size()给出文件的确切大小。
os.stat(“文件名”).st_size()
2)import os在此,我们必须提供确切的文件路径(绝对路径),而不是相对路径。
os.path.getsize(“文件路径”)
Path('./doc.txt').stat().st_size