Используя Python, как мне получить массив объектов file info, основанный на поиске в файловой системе?
Вопрос
В настоящее время у меня есть скрипт bash, который запускает find
команда, вот так:
find /storage/disk-1/Media/Video/TV -name *.avi -mtime -7
При этом будет получен список телешоу, которые были добавлены в мою систему за последние 7 дней.Затем я создаю несколько символических ссылок, чтобы иметь возможность переходить к моим новым телешоу.
Я хочу перекодировать это на Python, но у меня есть несколько вопросов, на которые я, кажется, могу найти ответы с помощью Google (возможно, я ищу не то, что нужно).Я думаю, лучший способ подвести итог этому - задать вопрос:
Как мне выполнить поиск в моей файловой системе (должен ли я вызвать find
?) который дает мне массив объектов file info (содержащий дату изменения, имя файла и т.д.), чтобы я мог сортировать их по дате и другим подобным вещам?
Решение
import os, time
allfiles = []
now = time.time()
# walk will return triples (current dir, list of subdirs, list of regular files)
# file names are relative to dir at first
for dir, subdirs, files in os.walk("/storage/disk-1/Media/Video/TV"):
for f in files:
if not f.endswith(".avi"):
continue
# compute full path name
f = os.path.join(dir, f)
st = os.stat(f)
if st.st_mtime < now - 3600*24*7:
# too old
continue
allfiles.append((f, st))
При этом будут возвращены все найденные файлы в виде списка пар (имя файла, результат статистики).
Другие советы
загляните в модуль os: os.walk - это функция, которая обходит файловую систему, os.path - это модуль, который предоставляет файлу mtime и другую информацию о файле. также os.path определяет множество функций для разбора и разделения имен файлов. Р>
также представляет интерес, модуль glob определяет функции для «globbing» строки (соответствие строки с использованием правил подстановочных знаков unix)
Исходя из этого, создание списка файлов, соответствующих некоторому критерию, должно быть простым. Р>
- Вы можете использовать "найти" через модуль "подпроцесс".
- После этого используйте строковую функцию "split" для разбиения каждой строки
- Для каждого файла используйте модуль операционной системы (например,getmtime и т.д.) Для получения информации о файле
или
- Используйте модули "walk" и "glob", чтобы получить пути к файлам в objects