Выведение структуры папки на python3 с помощью модуля os
Я только начинаю свой путь в питоне и возникла следующая ситуация: мне нужно вывести структуру(в виде дерева) указанной папки, переданной как аргумент, используя модуль os, отображать имя и размер каждого файла. Я уже два дня пытаюсь решить эту задачу. У меня есть два куска кода. Один выводит структуру папки, другой выводит размер файлов. И я бы хотел понять как выводить сразу и то и то. Надеюсь здесь мне кто то сможет показать как это сделать и по возможности объяснить как это работает. Примеры кода ниже. Заранее большое спасибо.
##Этот выводит структуру##
import os
directory = "C:\\Users/user/Desktop/Papka"
for dirpach, dirnames, filenames, in os.walk(directory):
for dirname in dirnames:
print('Каталог: ', os.path.join(dirpach, dirname))
for filename in filenames:
print('Файл: ', os.path.join(dirpach, filename))
##Этот выводит размер##
import os
from os.path import join, getsize
directory = "C:\\Users/user/Desktop/Papka"
for root, dirs, files in os.walk(directory):
print(root, "consumes", end=" ")
print(sum(getsize(join(root, name)) for name in files), end=" ")
print("bytes in", len(files), "non-directory files")
Ответы (1 шт):
Вариант рекурсивной функции для вывода файлового дерева с размерами файлов и каталогов с использованием модуля os
import os
from os.path import join, getsize, basename
def dfs_tree(path):
def tree(path, level):
dsize, files, dirs = 0, [], []
files.append(f'{" " * (level - 1) * 4}\\{basename(path)}\\ ')
for item in sorted(os.listdir(path), key=lambda x: os.path.isfile(join(path, x))):
fullname = join(path, item)
if os.path.isdir(fullname):
tmp = tree(fullname, level + 1)
dsize += tmp[0]
files.append(tmp[1])
else:
fsz = getsize(fullname)
files.append(f'{" " * level * 4}{item} [{fsz:,} bytes]')
dsize += fsz
files[0] += f'[{dsize:,} bytes]'
return dsize, '\n'.join(files)
return tree(path, 1)[1]
print(dfs_tree('c:\\test'))
\test\ [7,456,345 bytes]
\File path\ [16,798 bytes]
PowerShell2.xlsm [16,785 bytes]
upload.ps1 [13 bytes]
\folder\ [1,374,678 bytes]
\archive\ [0 bytes]
\audio\ [0 bytes]
\documents\ [1,354,290 bytes]
periodic-table.pdf [1,330,344 bytes]
TemplateVBA_0031.xlsx [10,410 bytes]
test111111.txt [47 bytes]
TESTDOC.docx [13,029 bytes]
Text_1.txt [460 bytes]
\images\ [0 bytes]
\video\ [0 bytes]
TESTDOC.docm [20,388 bytes]
...