Как мне получить «время последнего изменения» каждого файла в каталоге в Python?

Мне было поручено создать небольшое приложение, которое позволяет пользователю: просматривать и выбирать конкретную папку, которая будет содержать файлы для ежедневной проверки, просматривать и выбирать конкретную папку, в которую будут поступать скопированные файлы, и вручную запускать файл check ', выполняемый скриптом. Для этого мне нужно получить время последнего изменения и добавить оператор if, который проверяет, не старше ли файл более 24 часов, а затем переместит файл в правильную папку. Думаю, я знаю, как все это делать. Проблемы возникают с методом os.path.getmtime. Насколько я понимаю, я не могу получить время изменения нескольких файлов. Я должен назвать файл специально. Так что "../File Transfer/Old Files/" не работает. Я получаю ту же ошибку:

      FileNotFoundError: [WinError 2] The system cannot find the file specified: 'LICENSE-MIT.txt' 

(это первый текстовый файл в папке старых файлов), если я изменю код на:

      x = os.path.getmtime(../File Transfer/Old Files/LICENSE-MIT.txt)

Это работает, но с одной сложностью. Это дает мне время в секундах, которое находится в диапазоне 449 миллиардов. Я могу преобразовать это число в пригодное для использования число, используя этот код:

      y = int(x)
z = y//60//60
print(z)

Это сохраняет его как int, а не float, и преобразует его из секунд в часы. Тогда я бы просто сделал оператор>=24 if, чтобы узнать, старше ли он дня. ОДНАКО, это все еще одна единственная файловая основа, которая действительно не работает для того, что я хочу, чтобы программа делала. Я хочу, чтобы это было сделано со всеми файлами в папке, независимо от того, как называются эти файлы или сколько их существует. ЛЮБАЯ помощь будет очень признательна!

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

      for file in os.listdir('../File Transfer/Old Files/'):
    if file.endswith ('.txt'):
        time_mod = os.path.getmtime(file)
        print(time_mod)

Игнорируйте последнюю строку. Это было только для меня, поэтому посмотрите результаты поиска и устранения неисправностей.

3 ответа

В os.listdir()Метод перечисляет файлы по заданному пути, исключая путь, поэтому вам нужно будет объединить путь самостоятельно:

      for file in os.listdir('../File Transfer/Old Files/'):
    if file.endswith('.txt'):
        time_mod = os.path.getmtime('../File Transfer/Old Files/' + file)
        print(time_mod)

В glob.glob() метод отлично работает в таких случаях:

      import os
import glob

for file in glob.globr('../File Transfer/Old Files/*.txt'):
    time_mod = os.path.getmtime('../File Transfer/Old Files/' + file)
    print(time_mod)

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

      import os
from time import time

PATH = '../File Transfer/Old Files/'

for file in os.listdir(PATH):
    if file.endswith('.txt'):
        time_mod = time() - os.path.getmtime(PATH + file)
        print(time_mod // 3600)

Импортируйте модуль os и модуль datetime. Используйте метод path.getmtime() из модуля os. Это даст вам отметку времени. Затем преобразуйте его в нормальное время с помощью метода datetime.fromtimestamp () из модуля datetime.

Вот пример:

      import os, datetime
n = os.path.getmtime("your file path")
print(datetime.datetime.fromtimestamp(n))

Для getmtimeвозвращаемое значение - это число, дающее количество секунд с начала эпохи. Следовательно, мы можем использовать datetime модуль, чтобы получить соответствующий объект datetime.

      from os.path import getmtime
from datetime import datetime as dt

m_time = getmtime('somefile.txt')

time = dt.fromtimestamp(m_time)

Пример:

      >>> time = getmtime('wsgi.py')
>>> time
1619622258.1773882
>>> dt.fromtimestamp(time)
datetime.datetime(2021, 4, 28, 20, 34, 18, 177388)
Другие вопросы по тегам