У меня есть следующий код;
oStat=os.stat(oFile)
print(time.strftime('%H:%M:%S', time.localtime(oStat.st_mtime)))
print(f"{time.localtime(oStat.st_mtime):%H:%M:%S}")
Первый оператор печати работает как положено; f-строка дает мне:
print(f"{time.localtime(oStat.st_mtime):%H:%M:%S}")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: unsupported format string passed to time.struct_time.__format__
Желаемый результат должен быть временем, например:
14:10:02
Почему это ошибка и как это исправить?
Я пробовал разные комбинации, но ни одна не работает.
TypeError расскажет вам все, что вам нужно знать. Как вы надеялись, что результат будет выглядеть?
Этот тип форматирования работает с объектами datetime
или date
из модуля datetime
. Функция time.localtime
возвращает низкоуровневый тип, который не поддерживает форматирование.
struct_time
просто наследует object.__format__
, который не поддерживает никаких изменений формата: он принимает только пустую строку в качестве аргумента.
(Для f-строк это означает, что вы можете указать :
, чтобы «ввести» спецификацию формата, но эта спецификация должна быть пустой: f'{time.localtime(...):}'
действителен, но нет ничего более сложного.)
Конец твоей стринги кажется странным.
time.localtime(oStat.st_mtime):%H:%M:%S
Это недопустимый код Python. Что вы пытаетесь вывести?
Это было бы лучше:
time.strftime('%H:%M:%S', time.localtime(oStat.st_mtime))
Это действительно внутри f-строки. Часть после первого «:» — это необязательная строка формата. Это может быть несколько вхождений ':'
Этот тип форматирования отлично работает с объектами datetime
(даже с несколькими :
). И предлагаемое вами решение уже дано в вопросе.
Модуль time
struct_time
является низкоуровневым и не поддерживает форматирование с помощью f-строк, вместо этого требуется вызов time.strftime
.
Вам следует предпочесть использовать высокоуровневые типы модуля datetime
:
from datetime import datetime
oStat=os.stat(oFile)
dt = datetime.fromtimestamp(oStat.st_mtime)
print(f'{dt:%H:%M:%S}')
Чего вы пытаетесь достичь? Каков желаемый результат?