2016-11-24 58 views
1

os.stat不给我正确的输出我只得到每个文件8192字节。下面OS.STAT()。ST_SIZE给我在Python中的大小不正确

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).st_size和os.path.getsize(path)的输出相同。提前致谢。

+1

'os.stat(路径)'='os.stat(os.path.join(路径,I))' –

回答

2

当您使用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

我觉得自己像个白痴。感谢帮助。 – Hsin