Используя Python, как мне получить массив объектов file info, основанный на поиске в файловой системе?

StackOverflow https://stackoverflow.com/questions/1617666

  •  06-07-2019
  •  | 
  •  

Вопрос

В настоящее время у меня есть скрипт 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top