Поиск последнего отредактированного файла в python - PullRequest
8 голосов
/ 28 апреля 2010

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

Макет папки:

root
    Folder A
        File A
        File B
    Folder B
        File C
        File D
etc...

Любые советы, чтобы начать меня, когда я ударился о стену.

Ответы [ 7 ]

17 голосов
/ 28 апреля 2010

Вы должны взглянуть на функцию os.walk , а также os.stat , которая позволяет вам делать что-то вроде:

import os

max_mtime = 0
for dirname,subdirs,files in os.walk("."):
    for fname in files:
        full_path = os.path.join(dirname, fname)
        mtime = os.stat(full_path).st_mtime
        if mtime > max_mtime:
            max_mtime = mtime
            max_dir = dirname
            max_file = fname

print max_dir, max_file
6 голосов
/ 28 апреля 2010

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

import os

def all_files_under(path):
    """Iterates through all files that are under the given path."""
    for cur_path, dirnames, filenames in os.walk(path):
        for filename in filenames:
            yield os.path.join(cur_path, filename)

latest_file = max(all_files_under('root'), key=os.path.getmtime)
3 голосов
/ 28 апреля 2010
  • используйте os.walk для просмотра файлов
  • используйте os.stat для получения метки времени изменения файла (st_mtime)
  • помещает метки времени и имена файлов в список и сортирует их по метке времени, наибольшая метка времени - это последний отредактированный файл.
2 голосов
/ 26 января 2019

Если кто-то ищет способ сделать это в одну строку:

latest_edited_file = max([f for f in os.scandir("path\\to\\search")], key=lambda x: x.stat().st_mtime).name
1 голос
/ 28 апреля 2010

Используйте os.path.walk() для обхода дерева каталогов и os.stat().st_mtime для получения mtime файлов.

Функция, которую вы передаете в os.path.walk() (параметр visit), просто должна отслеживать самое большое количество мим, которое оно видело, и то, где оно его увидело.

1 голос
/ 28 апреля 2010

Вы можете использовать

os.walk

См .: http://docs.python.org/library/os.html

0 голосов
/ 24 сентября 2018

Я использую path = r"C:\Users\traveler\Desktop":

import os
def all_files_under(path):
   #"""Iterates through all files that are under the given path."""
   for cur_path, dirnames, filenames in os.walk(path):
      for filename in filenames:
         yield os.path.join(cur_path, filename)
latest_file = max(all_files_under('root'), key=os.path.getmtime)

Что мне здесь не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...