Ошибка вывода последнего файла из папки
Есть такой код:
def last_modified_file2():
global nCount
folder = '../video/Camera'
result = None
date = None
count = get_count()
if count > 0:
for name in glob.iglob(folder + "/*"):
if os.path.isfile(name):
if not result:
result = name
test = name.split('Camera/', 2)
date = os.path.getmtime(name)
else:
date2 = os.path.getmtime(name)
if date2 > date:
result = name
test = name.split('Camera/', 2)
date = date2
if count > nCount:
DataLoad(result,test[1])
nCount = count
end = test[1].split('|', 1)
return end[1]
else:
return '--:--'
Функция get_count():
def get_count():
list = os.listdir('../video/Camera') # dir is your directory path
number_files = len(list)
return number_files
Почему-то не выводит новые создающиеся файлы в директории, а тот который выводит (при первом запуске скрипта) дублирует. Причем порой ощущение, что файл он выбирает даже не самый последний а случайный близкий к нему.
Проще говоря, нужно выводить самый свежий файл, его название и полный путь к нему. Проверка проводится в цикле раз в N секунд (копирование файла из папки в GDrive).
P.S сейчас заметил,что обновляется последнее название после того, как создался новый (причем их может до этого появиться 1-3 шт.).
P.P.S Если важно,работаю на OrangePi lite под Armbian Bionic Linux 5.4.43-sunxi*
Нашел вариант решения:
path = '/video/Camera' # Путь к вашей папке
def last_modified_file2():
global nCount
dir_list = None
dir_list = [os.path.join(path, x) for x in os.listdir(path)]
count = get_count()
if count > 0:
date_list = [[x, os.path.getctime(x)] for x in dir_list]
sort_date_list = sorted(date_list, key=lambda x: x[1], reverse=True)
data = sort_date_list[0][0];
name = sort_date_list[0][0].split('/')
send = name[3].split('|')
return send[1]
print('count ' + count + ' nCount ' + nCount)
if count > nCount:
DataLoad(sort_date_list[0][0],name[3])
nCount = count
else:
return '--:--'
Может кто-то подскзать, как такое можно улучшить?
Ответы (1 шт):
from pathlib import Path
def get_last_modified_file(folder):
res = sorted([f for f in Path(folder).glob("*") if f.is_file()],
key=lambda f: f.stat().st_mtime)
if res:
f = res[-1]
return str(f.absolute()), f.name
return None, None
Тест:
In [91]: full_path, name = get_last_modified_file(r"d:\download")
In [92]: full_path
Out[92]: 'd:\\download\\data.txt'
In [93]: name
Out[93]: 'data.txt'