zfill()

zfill() 是 Python 字串string方法之一,用于在字串左侧填充零,使其达到指定的长度。这对于格式化数字(特别是需要在数字前补零的情况)非常有用,比如日期、时间或序号的格式化。

str.zfill(width)

width:指定的最小总长度。如果原始字串的长度小于 width,则会在左侧补零;若大于或等于 width,则不会做变动。

范例

范例 1:简单补零

num = "42"
padded_num = num.zfill(5)
print(padded_num) # 输出:\'00042\'

这里,num 长度为 2,小于指定的宽度 5,因此在左侧填充了三个零。

范例 2:负数的情况

num = "-42"
padded_num = num.zfill(5)
print(padded_num) # 输出:\'-0042\'

对于负数,zfill() 会在负号后填充零,以保持负号在最左侧。

范例 3:字串长度超过指定宽度

text = "12345"
padded_text = text.zfill(3)
print(padded_text) # 输出:\'12345\'

在此例中,字串长度已经大于 width,因此不会进行补零操作。

使用场景

当需要格式化数字并在它们前面加零时。生成固定宽度的 ID 或序列号。时间格式化时,确保分和秒是两位数字。

f"{i:0d}"

各部分含义:f"{}":使用 f-string 是 Python 格式化字串的一种方式,f"" 字符串内的花括号 {} 用来表示需要替换的变量或表达式。

{i:0d}:花括号内的内容是格式化指令,详细分为以下几个部分:

i:需要被格式化的变量(这里是变量 i)。: 冒号分隔符,表示接下来是格式化规则。0d:表示以十进位(d)的方式输出,并在左侧补零 (0) 使数字达到指定的宽度。

在 Python 中,f"{i:0d}" 是一种使用 f-string 格式化字串的方法,它让数字 i 以指定的格式出现在字串中假设我们要让数字 i 显示为 3 位数字,不足 3 位的部分以 0 补足,那么可以这样使用:

i = 5
formatted_i = f"{i:03d}"
print(formatted_i) # 输出:\'005\'

这里的 03d 表示:-0:在数字前面补零。-3:总长度为 3 位。-d:十进位的整数格式。

string 填充和对齐

从 Python 3.6 开始,f-string 支持对字串进行灵活的填充和对齐控制,语法简洁,功能强大。

右对齐 :*>

text = "Hello"
result = f"{text:*>10}" # `*` 为填充字符,总宽度为 10
print(result) # 输出:\'*****Hello\'

左对齐 :*<

text = "Hello"
result = f"{text:*<10}"
print(result) # 输出:\'Hello*****\'

居中对齐 :*^

text = "Hello"
result = f"{text:*^10}"
print(result) # 输出:\'**Hello***\'

f-string 浮点数格式化的基本语法

f-string 浮点数格式的基本语法是 {value:.nf},其中:

  • value 是要格式化的数字变数。
  • n 是显示的小数点位数。
  • .f 表示要将数字显示为浮点数格式。

pi = 3.14159
print(f"{pi:.2f}") # 输出:\'3.14\'

  • 固定小数点位数使用 .nf 可以固定小数点的位数,多余的位数会进行四捨五入,少于的位数则补零。
  • num = 5.6789
    print(f"{num:.2f}") # 输出:\'5.68\'
    print(f"{num:.3f}") # 输出:\'5.679\'

  • 控制总宽度和小数位数可以指定数字的 总宽度,包括小数点及小数点后的位数。如果显示的数字少于设定的宽度,则自动在左边填充空格。语法为 {value:width.nf}:
    • width 指定输出的总宽度(包括小数点和小数位数)。
    • .nf 表示小数点后显示的位数。

    num = 3.14
    print(f"{num:8.2f}") # 总宽度 8,小数点后 2 位,输出:\' 3.14\'
    print(f"{num:8.3f}") # 总宽度 8,小数点后 3 位,输出:\' 3.140\'

    string 中的分隔线

  • 基本的文字分隔线使用纯字符创建简单的分隔线,比如 - 或 = 等。这样的分隔线通常用于 CLI 输出,区分不同的内容区域。
  • print("-" * 40) # 输出: ----------------------------------------
    print("=" * 40) # 输出: ========================================

    2.使用 center() 方法制作带文本的分隔线可以在分隔线中加入文本,并用 center() 方法自动居中,让分隔线看起来更具说明性:

    print(" Welcome ".center(40, "-")) # 输出: ----------- Welcome ------------
    print(" Chapter 1 ".center(40, "=")) # 输出: ========== Chapter 1 ==========

  • 使用 f-string 生成分隔线如果分隔线的长度或样式需要依据变数动态生成,可以使用 f-string 来格式化:
  • width = 50
    char = "*"
    print(f"{char * width}") # 使用 width 控制长度,输出:*********************************

    4.分隔线函数可以写一个分隔线函数,灵活地控制字符、长度等。

    def separator(char="-", length=40, text=""):
    if text:
    print(f" {text} ".center(length, char))
    else:
    print(char * length)

    separator("*", 50, " Section ")
    separator("#", 30)

    ***************** Section *****************
    ##############################

    使用 f-string 的千位分隔符

    在 f-string 中,可以在数字后加上 :,,这样会自动以千位分隔显示。

    num = 1234567890
    print(f"{num:,}")
    #1,234,567,890