2017-08-13 32 views
0

我在OSX上發展,我的書指出:os.path.getsize()不給該文件的真實尺寸上OSX

調用os.path.getsize(path)將在該文件的字節返回的大小路徑參數。例如:

os.path.getsize('C:\\Windows\\System32\\calc.exe'`) 
> 776192 

它指出os.path.getsize()給人以字節爲單位的大小,但是當我試圖找到我的桌面上的文件夾的大小,它給奇怪的結果。

我的桌面上有一個文件,即音樂。我在shell寫了這個代碼:

os.path.getsize('/Users/apple/Desktop/Music') 
> 510 

這意味着Music的大小必須是510個字節,但它有一個大小1.32GB的!

+0

看到這個問題https://stackoverflow.com/questions/10404534/os-path-getsize-returns-incorrect-value – Huang

+1

由於問題是「音樂」是一個文件,這是嚴重的誤導。在非常早期的UNIX系統中,目錄是文件(如in,可通過以文件爲中心的系統調用如'read()'訪問),但這種情況在很長一段時間內並非如此,當然也不存在於任何存在的MacOS版本中。 –

+0

@CharlesDuffy感謝您澄清我的錯誤觀念! Bdw,是否有Python中的任何命令會給我目錄本身的大小? –

回答

1

這是因爲你要求的目錄本身的大小,而不是其內容的大小。 Unix(OSX)中的目錄被認爲是包含元數據的特殊文件;描述文件系統上目錄的信息。 .getsize()告訴你的是,元數據只佔用510個字節。

請注意,本書給出的第一個例子是詢問文件calc.exe的大小,而不是目錄。

要獲取目錄內容的總大小,您需要遞歸遍歷整個層次結構,並在每個文件上調用getsize()。這是一個在線解決方案做到這一點:

sum([os.path.getsize(f) for f in os.listdir('.') if os.path.isfile(f)]) 

哪裏'.'是你正在試圖獲得的大小目錄的基本路徑。

+0

感謝您的回答!但什麼是元數據? –

+0

元數據是關於目錄的數據,它位於磁盤上的位置等。 – Soviut

+0

是否每個文件夾位於桌面上的目錄? –

0

您只是要求目錄分配的大小。不是其中的內容。 os.path.getsize() 可以讓你得到一個文件的大小。

注意:如果文件夾僅包含子文件夾而沒有文件,則實際上被認爲是「空」。