Top.Mail.Ru
Ответы

Пожалуйста, помогите с задачей на python!

Напишите программу, которая получает на вход путь до каталога (это может быть и просто корень диска) и выводит общее количество файлов и подкаталогов в нём. Также выведите на экран размер каталога в килобайтах (1 килобайт = 1024 байт).

Важный момент: чтобы посчитать, сколько весит каталог, нужно найти сумму размеров всех вложенных в него файлов.

Результат работы программы на примере python_basic\Module14:

E:\PycharmProjects\python_basic\Module14
Размер каталога (в Кб): 8.373046875
Количество подкаталогов: 7
Количество файлов: 15

По дате
По рейтингу
Аватар пользователя
Мудрец

Вот пример кода на Python:

import os

def count_files_dirs_size(path):
size = 0
files = 0
dirs = 0
for dirpath, dirnames, filenames in os.walk(path):
for f in filenames:
fp = os.path.join(dirpath, f)
size += os.path.getsize(fp)
files += 1
dirs += len(dirnames)
return (files, dirs, size)


path = input("Введите путь до каталога: ")
(files, dirs, size) = count_files_dirs_size(path)

print("Размер каталога (в Кб):", size/1024)
print("Количество подкаталогов:", dirs)
print("Количество файлов:", files)


При запуске программы, пользователь должен ввести путь до каталога.
В функции `count_files_dirs_size` мы с помощью `os.walk` проходим по всем директориям и файлам в указанном каталоге.
Затем мы увеличиваем переменные `size` для подсчета размера каталога (суммируем размеры всех файлов), `files` для подсчета количества файлов и `dirs` для подсчета количества подкаталогов.
В функции мы возвращаем кортеж, содержащий количество файлов, каталогов и размер каталога.

После этого, мы выводим на экран результаты с помощью функции `print()`. Размер каталога в килобайтах, подсчитывается делением переменной `size` на 1024.import os

Аватар пользователя
Знаток
12345678910111213141516171819202122232425262728
 import os  
 
def info_catalog(dir_path):  
    path = os.scandir(dir_path)  
    files = 0  
    folders = 0  
    size = 0  
    for i_elem in path:  
        size += os.path.getsize(i_elem)  
        if os.path.isfile(i_elem):  
            files += 1  
        elif os.path.isdir(i_elem):  
            folders += 1  
            size_count, file_count, folder_count = info_catalog(i_elem)  
            size += size_count  
            files += file_count  
            folders += folder_count  

    return size, files, folders  
 

info_path = input('Введите путь: ')  
info_size, info_files, info_dir = info_catalog(info_path)  
print('Размер каталога (в Кб):', info_size / 1024)  
print('Количество подкаталогов:', info_dir)  
print('Количество файлов:', info_files) 
 
 
Аватар пользователя
Знаток
12345678910111213141516171819
 import os
def info_catalog(project, cnt_dir=0, cnt_file=0, size=0): 
   for i_path, i_dir, i_file in os.walk(project):       
        cnt_dir += len(i_dir) 
        cnt_file += len(i_file) 
        for i in i_file: 
            file_path = os.path.join(i_path, i) 
            size += os.path.getsize(file_path) 
    return size, cnt_dir, cnt_file 
 
 
project = input('Введите папку: ') 
path_to_project = os.path.abspath(os.path.join('..', '..', project)) 
info_size, info_cnt_dir, info_cnt_file = info_catalog(path_to_project) 
 
print(path_to_project) 
print(f'Размер каталога (в Кб): {info_size / 1024}') 
print(f'Количество подкаталогов: {info_cnt_dir}') 
print(f'Количество файлов: {info_cnt_file}') 
Аватар пользователя
Ученик
12345678910111213141516171819202122232425262728293031
 import os 
 
 
def recursive_call(dir_path): 
    folder_array = os.scandir(dir_path) 
    files = 0 
    folders = 0 
    for path in folder_array: 
        if path.is_file(): 
            files += 1 
        elif path.is_dir(): 
            folders += 1 
            file_count, folder_count = recursive_call(path) 
            files += file_count 
            folders += folder_count 
    return files, folders 
 
 
def get_size(dir_path): 
    size_in_bytes = 0 
    for i_size in os.scandir(dir_path): 
        size_in_bytes += os.path.getsize(i_size) 
    return size_in_bytes / 1024 
 
 
input_path = input() 
p_size = get_size(input_path) 
p_files, p_folders = recursive_call(input_path) 
print(f'Размер каталога (в Кб): {p_size}' 
      f'\nКоличесвто подкаталогов: {p_folders}' 
      f'\nКоличество файлов: {p_files}')