我试图理解使用以下表达式的代码

f"{current_file_start_time.year}{current_file_start_time.month:02}{current_file_start_time.day:02}"

下面是一个最小的工作示例,从Spyder控制台粘贴:

from datetime import datetime, timezone
current_file_start_time = datetime.now(timezone.utc)
current_file_start_time.month
   Out[20]: 4
type(_)
   Out[21]: int
 f"{current_file_start_time.year}{current_file_start_time.month:02}{current_file_start_time.day:02}"
   Out[22]: '20240410'

More specifically,04是由于部件{current_file_start_time.month:02}. 相关规则似乎由this reference page来描述:

format_spec     ::=  [[fill]align][sign]["z"]["#"]["0"][width][grouping_option]["." precision][type]
fill            ::=  <any character>
align           ::=  "<" | ">" | "=" | "^"
sign            ::=  "+" | "-" | " "
width           ::=  digit+
grouping_option ::=  "_" | ","
precision       ::=  digit+
type            ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

{current_file_start_time.month:02}中的前导0似乎与以上format_spec的几个组成部分相匹配,即:(i)[fill];(ii)["0"];和(iii)和前导数[width]. 我找不到组件(ii)的描述,也许这是使用"0"代替fill的一个特例.

决定{current_file_start_time.month:02}中的0是代表fill"0"还是代表width的前导数的规则是什么? 虽然在这个例子中它可能没有太大的关系,但我不想猜测什么时候组成其他格式说明符?

我使用Python 3.9.

推荐答案

阅读specification:

当没有给出显式对齐方式时,宽度字段前面加一个零('0')字符可为数字类型启用符号感知的零填充.这相当于填充字符"0",对齐类型"=".

所以02在格式规范中代表["0"][width].

format_spec ::= [[fill]align][sign]["z"]["#"]["0"][width][grouping_option]["." precision][type]

它不可能是fill,因为[[fill]align]意味着如果fill存在,align也存在.

Python相关问答推荐

大Pandas 胚胎中产生组合

使用新的类型语法正确注释ParamSecdecorator (3.12)

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

为什么符号没有按顺序添加?

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

如何使用数组的最小条目拆分数组

在Mac上安装ipython

在单个对象中解析多个Python数据帧

如何在turtle中不使用write()来绘制填充字母(例如OEG)

使用Python和文件进行模糊输出

如何防止Pandas将索引标为周期?

Pandas:填充行并删除重复项,但保留不同的值

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

Cython无法识别Numpy类型

如何在Python请求中组合多个适配器?

查看pandas字符列是否在字符串列中

操作布尔值的Series时出现索引问题

将数字数组添加到Pandas DataFrame的单元格依赖于初始化

使用xlsxWriter在EXCEL中为数据帧的各行上色

大Pandas 中的群体交叉融合