Мне нужно получить последний файл папки с помощью python. При использовании кода:
max(files, key = os.path.getctime)
Я получаю следующую ошибку:
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'a'
python
python-3.x
python-2.7
garlapak
источник
источник
Ответы:
Все, что присвоено
files
переменной, неверно. Используйте следующий код.источник
if os.path.isdir(latest_file):
pathlib.Path
объектами больше, чем со строками и os.path. С объектами pathlib.Path ваш ответ будет следующим:list_of_paths = folder_path.glob('*'); latest_path = max(list_of_paths, key=lambda p: p.stat().st_ctime)
os.path.getctime
как ключ, даже сPath
объектами.довольно неполный код. Что есть
files
? Вероятно, это список имен файлов, выходящих изos.listdir()
.Но в этом списке перечислены только части имен файлов (также известные как «базовые имена»), поскольку их путь является общим. Чтобы использовать его правильно, вы должны объединить его с путем, ведущим к нему (и использованным для его получения).
Такие как (непроверенные):
источник
if basename.endswith('.csv')
в список понимание.Я бы предложил использовать
glob.iglob()
вместоglob.glob()
, так как это более эффективно.Что значит
glob.iglob()
будет эффективнее.Я в основном использую приведенный ниже код, чтобы найти последний файл, соответствующий моему шаблону:
LatestFile = max(glob.iglob(fileNamePattern),key=os.path.getctime)
ПРИМЕЧАНИЕ: Существуют варианты
max
функций, в случае нахождения последнего файла мы будем использовать следующий вариант:max(iterable, *[, key, default])
который требует итерации, поэтому ваш первый параметр должен быть итерируемым. В случае нахождения максимального числа мы можем использовать следующий вариант:
max (num1, num2, num3, *args[, key])
источник
max()
сорт. В моем случае я использовал другое,key=os.path.basename
поскольку в именах файлов были временные метки.Попробуйте отсортировать предметы по времени создания. Пример ниже сортирует файлы в папке и получает первый элемент, который является последним.
источник
У меня нет репутации, чтобы комментировать, но ответ Марлона Абейкуна не дал мне правильного результата. Однако использование mtime помогает. (ключ = os.path.get m время))
Я нашел два ответа на эту проблему:
python os.path.getctime max не возвращает последнюю разницу между python - getmtime () и getctime () в системе unix
источник
(Отредактировано для улучшения ответа)
Сначала определите функцию get_latest_file
Вы также можете использовать строку документации!
Если вы используете Python 3 , вы можете использовать вместо этого iglob .
Полный код для возврата имени последнего файла:
источник
JuniperAccessLog-standalone-FCL_VPN
роль?Я попытался использовать приведенные выше предложения, и моя программа разбилась, чем я понял, что файл, который я пытаюсь идентифицировать, был использован, и при попытке использовать os.path.getctime он разбился. что, наконец, сработало для меня:
этот код получает необычный объект между двумя наборами списков файлов, он не самый элегантный, и если одновременно создается несколько файлов, он, вероятно, не будет стабильным
источник
Гораздо более быстрый метод в Windows (0,05 с), вызовите сценарий летучей мыши, который делает это:
get_latest.bat
где
\\directory\in\question
находится каталог, который вы хотите исследовать.get_latest.py
если он находит файл,
stdout
это путь иstderr
None.Используется
stdout.decode("utf-8").rstrip()
для получения удобного строкового представления имени файла.источник
ls -Art | tail -n 1
. Пожалуйста, оцените производительность решения, прежде чем заявлять о нем.Я использовал это в Python 3, включая сопоставление с образцом в имени файла.
источник