我正在使用以下函数从目标目录向下获取系统中的所有文件大小。
def get_files(target):
# Get file size and modified time for all files from the target directory and down.
# Initialize files list
filelist = []
# Walk the directory structure
for root, dirs, files in os.walk(target):
# Do not walk into directories that are mount points
dirs[:] = filter(lambda dir: not os.path.ismount(os.path.join(root, dir)), dirs)
for name in files:
# Construct absolute path for files
filename = os.path.join(root, name)
# Test the path to account for broken symlinks
if os.path.exists(filename):
# File size information in bytes
size = float(os.path.getsize(filename))
# Get the modified time of the file
mtime = os.path.getmtime(filename)
# Create a tuple of filename, size, and modified time
construct = filename, size, str(datetime.datetime.fromtimestamp(mtime))
# Add the tuple to the master filelist
filelist.append(construct)
return(filelist)
如何修改它以包括包含目录和目录总大小的第二个列表?我正在尝试将此操作包含在一个函数中,希望比在单独的函数中执行第二次遍历以获取目录信息和大小更有效。
我们的想法是能够使用前 20 个最大文件的排序列表和前 10 个最大目录的第二个排序列表进行报告。
感谢你们的任何建议。
请您参考如下方法:
我在字典中而不是列表中输出目录,但看看你是否喜欢它:
def get_files(target):
# Get file size and modified time for all files from the target directory and down.
# Initialize files list
filelist = []
dirdict = {}
# Walk the directory structure
for root, dirs, files in os.walk(target):
# Do not walk into directories that are mount points
dirs[:] = filter(lambda dir: not os.path.ismount(os.path.join(root, dir)), dirs)
for name in files:
# Construct absolute path for files
filename = os.path.join(root, name)
# Test the path to account for broken symlinks
if os.path.exists(filename):
# File size information in bytes
size = float(os.path.getsize(filename))
# Get the modified time of the file
mtime = os.path.getmtime(filename)
# Create a tuple of filename, size, and modified time
construct = filename, size, str(datetime.datetime.fromtimestamp(mtime))
# Add the tuple to the master filelist
filelist.append(construct)
if root in dirdict.keys():
dirdict[root] += size
else:
dirdict[root] = size
return(filelist, dirdict)
如果您希望将指令作为元组列表,只需执行以下操作:
dirdict.items()
