使用 os.path.getsize(path)
能夠獲取到文件的大小,可是若是path是一個文件夾而不是文件的話,雖然也有數值返回,可是並非這個文件夾真正的大小。至少windows上是這樣的。Linux可能沒問題(畢竟一切皆文件)。不如既然能夠獲取到文件的大小,那麼遍歷以便全部文件,文件夾大小也就有了。
使用 os.walk(path)
就能夠遍歷目錄下的全部目錄和文件,包括子目錄:python
import os folder_path = r'E:\Downloads' for parent, dirs, files in os.walk(folder_path): # 輸出文件夾信息 for dir in dirs: print('parent is :', parent) print('dirname is ', dir) # 輸出文件信息 for file in files: print('parent is :', parent) print('filename is :', file) # 文件的完整路徑 fullname = os.path.join(parent, file) print('the fulll name of the file is :', fullname) file_size = os.path.getsize(fullname)/1024/1024 print('the file size is : %.2f MB' % file_size)
上面的例子中,第一個for循環是遍歷文件夾的,咱們只要文件,也就是隻要第二個for循環,把其中每一項加起來windows
# 獲取文件夾的大小 import os folder_path = r'E:\Downloads' full_size = 0 for parent, dirs, files in os.walk(folder_path): for file in files: fullname = os.path.join(parent, file) file_size = os.path.getsize(fullname) full_size += file_size print(full_size, "%.2f MB" % (full_size/1024/1024))
把裏層的for循環寫成迭代器,再用sum來替代 full_size += file_size
:ide
import os folder_path = r'E:\Downloads' full_size = 0 for parent, dirs, files in os.walk(folder_path): full_size = sum(os.path.getsize(os.path.join(parent, file)) for file in files) print(full_size, "%.2f MB" % (full_size/1024/1024))
再把最外面的for循環也剝掉,就成了下面的一行代碼了。
一行代碼:code
full_size = sum(sum(os.path.getsize(os.path.join(parent, file)) for file in files) for parent, dirs, files in os.walk(folder_path))
完美,徹底看不懂了。get
關於嵌套2層for循環的寫法,上面用了括號。更簡介的寫法是把括號去掉,把外層的for寫在前面:it
for i in a: for j in i: print(j) [j for i in a for j in i]