2016-11-24 8 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

関連する問題