Вы можете выполнить сортировку глобуса с помощью нескольких уловок, чтобы добраться до даты и времени. Предполагая, что ваши временные метки - это все месяцы и дни с нулями с 4-di git год, это будет работать для вас:
import os
from glob import glob
# Grab the filenames matching this glob
filenames = glob.glob('../Desktop/diary/*-2020.txt')
# Sort the filenames by ascending date
def filename_to_isodate(filename):
date = os.path.basename(filename).rsplit('.', 1)[0][-10:]
return date[-4:] + date[3:5] + date[:2]
filenames = sorted(filenames, key=filename_to_isodate)
for filename in filenames:
... # Your stuff here...
Пояснение os.path.basename
дает нам имя файла, например, '../Desktop/diary/01-01-2020.txt' становится '01 -01-2020.txt '
rsplit('.', 1)[0][-:10]
разбивает базовое имя на период, эффективно удаляя расширение и захват только того, что находится перед расширением. [-10:]
захватывает только 10 символов, составляющих дату, в данном случае 4 для года + 2 для месяца + 2 для дня + 2 дефиса = 10 символов.
Наконец, при сортировке мы используем sorted
с key
, чтобы указать функции сортировки по дате ISO (год, месяц, день).
изменить : после ввода от @Daniel F, strptime
из модуля datetime
заменяется простым использованием даты в строковом формате ISO при сортировке для повышения скорости. Ниже был приведен исходный метод, использованный в этом ответе.
Встроенный модуль datetime
может использоваться для анализа даты и времени в заданном формате, в данном случае: %d-%m-%Y
. strptime
дает объект datetime
, который можно обрабатывать численно, что означает, что его можно сравнивать и, таким образом, сортировать. os.path.basename (s) .rsplit ('.', 1) [0] [- 10:], '% d-% m-% Y'