Поиск новых файлов в поддиректориях. Python

Всем привет! Я новичок в Python. Сейчас у меня задача автоматизация работы с бэкапами. Есть локальный диск, на котором есть , к примеру 20 папок, в которых находятся .7z файлы. Количество файлов с каждым днём растёт, но думаю это не важно. Мне нужно из каждой папки доставать последний созданный архив и разархивировать его в другую директорию. У меня есть код, который проходится по папкам и все файлы собирает в один список и после разархивирует ВСЕ файлы списка. Из общего списка я не могу отсортировать нужные файлы. Прошу подсказки, как я могу выбирать нужные файлы по дате создания из каждой папки. Прилагаю код:

import os
import py7zr as zp

os.chdir("d:\dir1")                                             
for root, dirs, files in os.walk(".", topdown = False):       
   for name in files:                                        
      a = os.path.join(root, name)
       print(a)                          
       with zp.SevenZipFile(a) as my_zip_file:                
       my_zip_file.extract('d:\dir2')

Ответы (3 шт):

Автор решения: Daniele_Taby

Для того чтобы выбрать последний созданный файл в каждой папке, тебе нужно использовать функцию os.path.getctime для получения времени создания файла и затем отсортировать файлы по времени создания.

→ Ссылка
Автор решения: Alexey Trukhanov

Из каждой директории надо взять файл с максимальной датой создания. Проблема в том, что операция получения даты создания файла платформозависимая. Вот тут подробно. Я исхожу из того, что у тебя Windows, но если тебе нужна кроссплатформенность, см. ссылку выше. Действуем так: собираем пути+файлы из каждой директории в список и потом получаем файл с максимальной датой создания. Решение для Windows:

import os
import py7zr as zp

os.chdir("d:\dir1")                                             
for root, dirs, files in os.walk(".", topdown = False): 
      
   file_list = [os.path.join(root, name) for name in files]
   the_last_archive = max(file_list, key=os.path.getctime)

   print(the_last_archive)                          
   with zp.SevenZipFile(the_last_archive) as my_zip_file:                
   my_zip_file.extract('d:\dir2')

Сразу прошу прощения, код не проверял.

→ Ссылка
Автор решения: Amgarak

Я бы решил вопрос через datetime, примерно так:

import os

from datetime import datetime, timedelta

source_dir = "C:\\Users\\Amgarak\\Downloads"

# Для примера воспользуемся дельтой, относительно текущей даты
target_date_delta = timedelta(days=7)  # Например, 7 дней назад

# Получаем текущую дату и вычитаем дельту
target_date = datetime.now() - target_date_delta

for root, dirs, files in os.walk(source_dir, topdown=False):
    for name in files:
        file_path = os.path.join(root, name)
        
        # Получаем время создания файла
        file_creation_time = os.path.getctime(file_path)
        
        # Преобразуем время создания в формат datetime
        creation_datetime = datetime.fromtimestamp(file_creation_time)
        
        # Тут можете реализовать свою логику фильтра 
        # Например, можно выбрать файлы созданные после вычисленной ранее даты
        if creation_datetime > target_date:
            print(file_path)
→ Ссылка