07_Работа_со_структурированными_данными.md - YaroslavGit28/os.sys-PY GitHub Wiki

07. Работа со структурированными данными


7.1. Структурированные данные через os.scandir и os.stat

В новой версии проекта акцент смещён в сторону os:

with os.scandir(CURRENT_DIR) as it:
    for entry in it:
        mark = "[DIR]" if entry.is_dir(follow_symlinks=False) else "     "
        print(mark, entry.name)

os.scandir удобен тем, что возвращает DirEntry, где доступны:

  • entry.name;
  • entry.is_dir() / entry.is_file();
  • быстрый доступ к части метаданных без лишних обращений.

7.2. Сравнение: os.listdir vs os.scandir

os.listdir (просто список имён):

current = os.getcwd()
for name in os.listdir(current):
    full = os.path.join(current, name)
    if os.path.isdir(full):
        print("[DIR]", name)

os.scandir (имя + структурная информация о типе):

with os.scandir(current) as it:
    for entry in it:
        mark = "[DIR]" if entry.is_dir() else "     "
        print(mark, entry.name)

7.3. Детальная структура через os.path и os.stat

Проект выводит структуру и метаданные файла:

print(os.path.abspath(target))
print(os.path.isfile(target), os.path.isdir(target))
print(time.ctime(os.path.getmtime(target)))

st = os.stat(target)
print(st.st_size, st.st_mode, st.st_mtime)

Такой подход показывает разницу:

  • os.path.* — быстрые точечные проверки;
  • os.stat — полный набор метаданных для дальнейшей обработки.

7.4. Пример без os (ручной способ)

Без os структурированные сведения в Python не получить. Пользователь вручную смотрит свойства файла в Проводнике:

  1. Правый клик по файлу;
  2. «Свойства»;
  3. Чтение размера/дат изменения вручную.

С os та же информация доступна программно и повторяемо.


7.5. Разбор кода по шагам: os.scandir

with os.scandir(CURRENT_DIR) as it:
    for entry in it:
        mark = "[DIR]" if entry.is_dir(follow_symlinks=False) else "     "
        print(mark, entry.name)

Пояснение:

  1. os.scandir(CURRENT_DIR) открывает итератор по элементам директории.
  2. with ... as it гарантирует закрытие системных ресурсов.
  3. entry — объект DirEntry, а не просто строка имени.
  4. entry.is_dir(...) даёт быстрый тип элемента без ручного склеивания путей.
  5. entry.name выводит только имя, без лишнего шума.

Практический смысл:

  • код остаётся коротким;
  • структура вывода сразу читаемая;
  • меньше дополнительных вызовов, чем в схеме “listdir + os.path.isdir”.