gpt4 book ai didi

Python:列出目录和大小

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:24 24 4
gpt4 key购买 nike

我正在尝试编写一些 Python 代码来遍历当前工作目录中的每个目录并报告每个目录下的总大小(以字节为单位),而不管每个目录本身有多深。

这只是一个学习项目,我意识到已经有其他方法可以通过 shell 获取此信息。这是我到目前为止的一些代码:

# 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

关于Python:列出目录和大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5680165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com