os.stat().st_size在python中给我不正确的大小



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计算的内容不一致,但是当它们不相同时就非常接近。

最新更新