Проблема с форматированием f-строки Python для struct_time

У меня есть следующий код;

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

Почему это ошибка и как это исправить?

Я пробовал разные комбинации, но ни одна не работает.

Чего вы пытаетесь достичь? Каков желаемый результат?

charles 30.04.2024 14:54

TypeError расскажет вам все, что вам нужно знать. Как вы надеялись, что результат будет выглядеть?

SIGHUP 30.04.2024 14:58

Этот тип форматирования работает с объектами datetime или date из модуля datetime. Функция time.localtime возвращает низкоуровневый тип, который не поддерживает форматирование.

interjay 30.04.2024 15:00
struct_time просто наследует object.__format__, который не поддерживает никаких изменений формата: он принимает только пустую строку в качестве аргумента.
chepner 30.04.2024 15:22

(Для f-строк это означает, что вы можете указать :, чтобы «ввести» спецификацию формата, но эта спецификация должна быть пустой: f'{time.localtime(...):}' действителен, но нет ничего более сложного.)

chepner 30.04.2024 15:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Конец твоей стринги кажется странным.

time.localtime(oStat.st_mtime):%H:%M:%S 

Это недопустимый код Python. Что вы пытаетесь вывести?

Это было бы лучше:

time.strftime('%H:%M:%S', time.localtime(oStat.st_mtime))

Это действительно внутри f-строки. Часть после первого «:» — это необязательная строка формата. Это может быть несколько вхождений ':'

Ted Elliott 30.04.2024 15:01

Этот тип форматирования отлично работает с объектами datetime (даже с несколькими :). И предлагаемое вами решение уже дано в вопросе.

interjay 30.04.2024 15:06
Ответ принят как подходящий

Модуль timestruct_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}')

Другие вопросы по теме