Как мне получить «время последнего изменения» каждого файла в каталоге в 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)