在Python中,OS.STAT().ST_SIZE给出了错误的大小

3

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?所有非目录文件的大小都比它大得多。 os.stat(path).st_size和os.path.getsize(path)的输出相同。提前致谢。

1
os.stat(path) != os.stat(os.path.join(path, i)) - Łukasz Rogalski
2个回答

3
你在使用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

0
这对我有用:
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计算的结果不一致,但当它们不同的时候,它还是相当接近的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接