问题描述
||
我正在尝试编写一些Python代码,这些代码将遍历当前工作目录中的每个目录并报告每个目录下的总大小(以字节为单位),而不管每个目录本身的深度如何。
这只是一个学习项目,我意识到已经有其他方法可以通过外壳获取此信息。这是我到目前为止的一些代码:
# get name of current working directory
start_directory = os.getcwd()
# create dictionary to hold the size of each folder in
# the current working directory
top_level_directory_sizes = {}
# initialize directory
for i in os.listdir(start_directory):
if os.path.isdir(i):
top_level_directory_sizes[i] = 0
# traverse all paths from current working directory
for dirpath,dirnames,filenames in os.walk(start_directory):
for f in filenames:
fp = os.path.join(dirpath,f)
#increment appropriate dictionary element: += os.path.getsize(fp)
for k,v in top_level_directory_sizes.iteritems():
print k,v
因此,输出希望如下所示:
algorithms 23,754 bytes
articles 1,234 bytes
books 123,232 bytes
images 78,232 bytes
total 226,452 bytes
解决方法
这将列出给定目录中目录的大小以及总数:
import locale
import os
locale.setlocale(locale.LC_ALL,\"\")
def get_size(state,root,names):
paths = [os.path.realpath(os.path.join(root,n)) for n in names]
# handles dangling symlinks
state[0] += sum(os.stat(p).st_size for p in paths if os.path.exists(p))
def print_sizes(root):
total = 0
paths = []
state = [0]
n_ind = s_ind = 0
for name in sorted(os.listdir(root)):
path = os.path.join(root,name)
if not os.path.isdir(path):
continue
state[0] = 0
os.path.walk(path,get_size,state)
total += state[0]
s_size = locale.format(\'%8.0f\',state[0],3)
n_ind = max(n_ind,len(name),5)
s_ind = max(s_ind,len(s_size))
paths.append((name,s_size))
for name,size in paths:
print name.ljust(n_ind),size.rjust(s_ind),\'bytes\'
s_total = locale.format(\'%8.0f\',total,3)
print \'\\ntotal\'.ljust(n_ind),s_total.rjust(s_ind),\'bytes\'
print_sizes(\'.\')
输出:
% python dirsizes.py
bar 102,672 bytes
foo 102,400 bytes
total 205,072 bytes
,您应该看os.path.walk
。