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 не получить. Пользователь вручную смотрит свойства файла в Проводнике:
- Правый клик по файлу;
- «Свойства»;
- Чтение размера/дат изменения вручную.
С 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)
Пояснение:
os.scandir(CURRENT_DIR)открывает итератор по элементам директории.with ... as itгарантирует закрытие системных ресурсов.entry— объектDirEntry, а не просто строка имени.entry.is_dir(...)даёт быстрый тип элемента без ручного склеивания путей.entry.nameвыводит только имя, без лишнего шума.
Практический смысл:
- код остаётся коротким;
- структура вывода сразу читаемая;
- меньше дополнительных вызовов, чем в схеме “
listdir+os.path.isdir”.