OS.STAT没有给我正确的输出,每个文件仅获得8192字节。下面的代码
import os
path = "C:\"
filelist = os.listdir(path)
for i in filelist:
if os.path.isdir(os.path.join(path, i)):
print os.path.join(path, i), "is DIR"
else:
# fs = filesize
fs = os.stat(path).st_size
# fs = os.path.getsize(path)
print os.path.join(path, i), "size is", fs
这是输出:
C:$Recycle.Bin is DIR
C:Config.Msi is DIR
C:Documents and Settings is DIR
C:hiberfil.sys size is 8192
C:pagefile.sys size is 8192
C:PerfLogs is DIR
C:Program Files is DIR
C:Program Files (x86) is DIR
C:ProgramData is DIR
C:Python27 is DIR
C:Recovery is DIR
C:shared.log size is 8192
C:System Volume Information is DIR
C:Users is DIR
C:vcredist_x86.log size is 8192
C:Windows is DIR
为什么最大的数字是8192?所有不是DIR的文件的大小都比这大得多。OS.STAT(path).strongIZE和OS.PATH.GETSIZE(PATH)的输出相同。预先感谢。
使用os.stat()
检查文件大小时,您忘记了os.path.join(path, i)
,因此您始终获得C:的大小(8192,特定于Windows的东西)。固定脚本:
import os
path = "C:\"
filelist = os.listdir(path)
for i in filelist:
filepath = os.path.join(path, i)
if os.path.isdir(filepath):
print filepath, "is DIR"
else:
# fs = filesize
fs = os.stat(filepath).st_size
print filepath, "size is", fs
这对我有用:
def calc_folder_size(directory):
# https://www.geeksforgeeks.org/how-to-get-size-of-folder-using-python/
# assign size
size = 0
# get size
for path, dirs, files in os.walk(directory):
for f in files:
fp = os.path.join(path, f)
size += os.path.getsize(fp)
size = int(size)
# convert to GB
if (size / 1e+9) > 0.001:
size = size / 1e+9
size = str(size) + " GB"
else:
# convert to MB
size = size / 1e+6
size = str(size) + " MB"
return size
至少在大多数情况下。有时它与Windows计算的内容不一致,但是当它们不相同时就非常接近。