/
IvanKhabarov
/
python
Обзор
Документация
Войти
/
IvanKhabarov
/
python
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Home_Task/HT_15/task5.py
57 строк
2 KB
Ivan-Khabarov
added task 15
21 окт 2024, 13:10
21 окт 2024, 13:10
0925304
Код
Авторство
О чём код?
import os import logging from collections import namedtuple from argparse import ArgumentParser FileInfo = namedtuple('FileInfo', ['name', 'extension', 'is_directory', 'parent_directory']) logging.basicConfig( filename='directory_contents.log', level=logging.INFO, format='%(asctime)s - %(message)s' ) def collect_info(directory_path): """Собирает информацию о содержимом директории и сохраняет в лог.""" if not os.path.isdir(directory_path): raise ValueError(f"Указанный путь '{directory_path}' не является директорией.") parent_directory = os.path.basename(os.path.abspath(directory_path)) for entry in os.listdir(directory_path): entry_path = os.path.join(directory_path, entry) if os.path.isdir(entry_path): file_info = FileInfo(name=entry, extension=None, is_directory=True, parent_directory=parent_directory) else: name, extension = os.path.splitext(entry) file_info = FileInfo(name=name, extension=extension.lstrip('.'), is_directory=False, parent_directory=parent_directory) log_message = ( f"{file_info.name} | " f"{file_info.extension if file_info.extension else 'N/A'} | " f"{'Directory' if file_info.is_directory else 'File'} | " f"{file_info.parent_directory}" ) logging.info(log_message) def main(): """Основная функция для обработки командной строки и сбора информации.""" parser = ArgumentParser(description="Сбор информации о содержимом директории и запись в лог.") parser.add_argument('directory', type=str, help="Путь до директории для анализа") args = parser.parse_args() directory_path = args.directory try: collect_info(directory_path) print(f'Информация о содержимом директории "{directory_path}" успешно записана в файл "directory_contents.log".') except ValueError as e: print(f"Ошибка: {e}") except Exception as e: print(f"Произошла непредвиденная ошибка: {e}") if __name__ == '__main__': main()