Используя Python, как мне получить массив файловых информационных объектов, основанных на поиске файловой системы? - PullRequest
0 голосов
/ 24 октября 2009

В настоящее время у меня есть скрипт bash, который запускает команду find, например:

find /storage/disk-1/Media/Video/TV -name *.avi -mtime -7

Получает список телешоу, которые были добавлены в мою систему за последние 7 дней. Затем я продолжаю создавать символические ссылки, чтобы я мог попасть на мои новейшие телешоу.

Я пытаюсь перекодировать это в Python, но у меня есть несколько вопросов, на которых я могу найти ответы для использования Google (возможно, я не ищу нужную вещь). Я думаю, что лучший способ подвести итог - задать вопрос:

Как мне выполнить поиск в моей файловой системе (я должен назвать find?), Который дает мне массив файловых информационных объектов (содержащих дату изменения, имя файла и т. Д.), Чтобы я мог отсортировать их по дата и другие подобные вещи?

Ответы [ 3 ]

3 голосов
/ 24 октября 2009
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))

Возвращает все найденные файлы в виде списка пар (имя файла, результат статистики).

2 голосов
/ 24 октября 2009

посмотрите на модуль os: os.walk - это функция, которая обходит файловую систему, os.path - это модуль, который предоставляет файлу mtime и другую информацию о файле. также os.path определяет множество функций для разбора и разделения имен файлов.

также представляет интерес, модуль glob определяет функции для «глобализации» строк (сопоставление строки с использованием правил подстановочных знаков unix)

Исходя из этого, создание списка файлов, соответствующих некоторому критерию, должно быть простым.

1 голос
/ 24 октября 2009
  • Вы можете использовать «find» через модуль «subprocess».
  • После этого используйте функцию разделения строки для разделения каждой строки
  • Для каждого файла используйте модуль ОС (например, getmtime и т. Д.), Чтобы получить информацию о файле

или

  • Используйте модули "walk" и "glob", чтобы получить пути к файлам в объектах
...