Сортировать список файлов по дате создания в Python

#python

#python

Вопрос:

Я осмотрелся и не могу найти конкретного ответа на свое решение, и на данный момент мой мозг перегружен. Я пытаюсь создать видео mp4 на основе некоторых bmp-файлов в папке. Однако я хочу, чтобы файлы были упорядочены по самой ранней дате изменения видео. Итак, я использую самую старую измененную дату. Я нашел здесь кое-что об использовании os.path.getmtime, однако, если я добавлю это, он сообщит мне, что не может найти файл. Я предполагаю, что это потому, что файлы расположены в сети, а не в моем локальном пути, где установлен python. Вот мой код. Я подтвердил, что все остальное работает, поэтому все, что мне нужно, это выяснить, как сортировать файлы.

 import cv2
import numpy as np
import os
from os.path import isfile, join

#change this to the path where the pictures are located
pathIn= #MyPathWhichIsOnANetworkNotWherePythonIsInstalled

#input your video name amp; video type:
vid_name = "FirstCalPics.mp4"

#change this to the path where the video should be saved:
pathSave = #AlsoAPathWhichIsOnANetworkNotWherePythonIsInstalled

#set your fps here:
fps = 10

pathOut = pathSave   vid_name

fourcc = cv2.VideoWriter_fourcc(*'mp4v')

frame_array = []
files = [f for f in os.listdir(pathIn) if isfile(join(pathIn, f))]

#Sort files based on date modified:
files.sort(key=os.path.getmtime)   #<--- HERE'S THE ISSUE

for i in range(len(files)):
    filename=pathIn   "\"   files[i]
    #reading each files
    img = cv2.imread(filename)
    height, width, layers = img.shape
    size = (width,height)
    
    #inserting the frames into an image array
    frame_array.append(img)
out = cv2.VideoWriter(pathOut, fourcc, fps, size)

for i in range(len(frame_array)):
    # writing to a image array
    out.write(frame_array[i])
out.release()
  

Комментарии:

1. files.sort(key=lambda f: os.path.getmtime(join(pathIn, f)))

Ответ №1:

Причина, по которой он говорит, что он не отображается как файл при попытке использовать just os.path.getmtime , заключается в том, что вы проверяете just path , когда у вас также есть каталог: pathIn .

Вы можете использовать join при сортировке:

 files.sort(key=lambda f: os.path.getmtime(join(pathIn, f)))
  

Или (и синтаксис зависит от вашей версии Python) вы можете напрямую изначально сохранить полный путь к файлу:

 files = [fullPath for path in os.listdir(pathIn) if isfile((fullPath := join(pathIn, f)))]
  

Это устраняет необходимость в filename=pathIn "\" files[i] дальнейшем в вашем коде.

Комментарии:

1. @RufusVS не могли бы вы объяснить? Похоже, что OP os.path.join успешно использовался в предыдущих частях кода

2. Упс, вы правы, я не заметил from версию инструкции import.

3. Оператору walrus не потребовалось много времени, чтобы стать полезным.