сортировать пути к моим файлам в соответствии с их датой создания?

#python #file #tkinter

#python #файл #tkinter

Вопрос:

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

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

Есть моя функция :

 def CheckModifyTime():

    path = "C:\Users\sohei\Desktop\Perso\TestScriptWinSCP"
    myDir = os.listdir(path)
    window = tk.Toplevel(GuiInterface)
    window.geometry("800x800")
    today = date.today()
    for root, dirs , files in os.walk(path):
        for f in files:
            myFiles = os.path.join(root, f)
            modifyTime = myFiles   " "   time.ctime(os.path.getmtime(myFiles))
            
            #print(modifyTime)
            myVar = StringVar()
            myVar.set(modifyTime)
            label = tk.Entry(window , textvariable = myVar , width = "100").pack()
  

и с sorted() методом :

 def CheckModifyTime():

    path = "C:\Users\sohei\Desktop\Perso\TestScriptWinSCP"
    myDir = os.listdir(path)
    window = tk.Toplevel(GuiInterface)
    window.geometry("800x800")
    today = date.today()
    for root, dirs , files in os.walk(path):
        for f in files:
            
            myFiles = os.path.join(root, f)
            modifyTime = myFiles   " "   time.ctime(os.path.getmtime(myFiles))
            
            #print(modifyTime)
            myVar = StringVar()
            
            sortedFiles = sorted(modifyTime , key=lambda t: os.stat(t).st_mtime)
            myVar.set(sortedFiles)
            print(sortedFiles)
            label = tk.Entry(window , textvariable = myVar , width = "100").pack()
  

У вас есть идея отсортировать мои файлы?

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

1. Если я здесь чего-то не упускаю, вы пытаетесь «сортировать» один объект на каждой итерации. Почему «MyFiles» — множественное число? Это путь. Это одно. проверьте имена ваших переменных, тогда, вероятно, будет больше смысла в том, что происходит.

2. @Neil да, я исправил свою проблему, действительно легко, но я работал над своим кодом в течение 5 часов, и я не заметил, что это было так просто, спасибо

Ответ №1:

Я бы создал для них объект.

 class DatedFile:
    def __init__(self, name, date):
        self.name = name
        self.date = date
    def __lt__(self, other):
        return self.date<self.other
  

Метод lt — это встроенная «волшебная» функция, которая вызывается всякий раз, когда используется оператор «меньше, чем». Это важно, потому что функции сортировки на самом деле просто выполняют много

Затем поместите все ваши файлы с датами в список, состоящий из экземпляров этого класса.

 my_files = []
for f in files:
    my_files.append(DatedFile(name, date))
my_files.sort()
  

А затем он отсортирует их по дате, и вы сможете получить доступ к их переменным, как к любому другому классу (.name и .date)

Дайте мне знать, если это поможет или если у вас есть какие-либо вопросы о необходимости дополнительных примеров!