Pythonプログラミング入門(019) - 文字列のformat()メソッドを詳しく解説
1. format()メソッドの基本形式
string の format() メソッドは、文字列をフォーマットするために使用されます。format() メソッドは非常に強力ですが、形式は比較的複雑です。構文は次のとおりです。
常量{
参数序列:格式控制标记}常量{
参数序列:格式控制标记}.format(*args, **kwargs)
例証します:
(1) パラメータシリアル番号は受信パラメータであり、書式設定テンプレートは、受信パラメータを書式設定するために使用される文字列と書式制御記述文字から構成される文字列です。書式設定テンプレートは {} で表され、format() メソッドのカンマ区切りパラメータに対応して複数存在する可能性があります。
(2) 定数はシンボルまたはテキストが可能であり、プログラム開発のニーズに応じて設定できます。
(3)位置パラメータは1つまたは2つ以上であり、対応するインデックスシーケンス番号は位置インデックスと1対1に対応することができる。インデックス番号と書式タグが両方とも空の場合、実際には位置パラメータに直接接続された文字列になります。
例えば:
print("小明的生日为:{}年{}月{}日".format(2004,12,5))
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
小明的生日为:2004年12月5日
2. format()メソッドの使用方法
1. 順番に交換する
形式は次のとおりです。
"{} {}".format(values1, values2)
注: format は、パラメータを位置順に文字列に入力し、順番に自動的に割り当てます。パラメータは複数回挿入できます。{ {}} は {} を表すだけであり、文字列の書式設定の位置順序を占めません。
例えば:
# {} 和参数的个数必须匹配,否则会报错。
name = "王涛"
age = 25
print("我叫{},今年{}岁了。".format(name,age))
print("Address:{}{}{},{}。".format("河南省","新乡市","红旗区","河南科技学院"))
print("{}{
{}}{}{
{}}{}".format("河南省","新乡市","红旗区"))
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
我叫王涛,今年25岁了。
Address:河南省新乡市红旗区,河南科技学院。
河南省{
}新乡市{
}红旗区
2. インデックスに従って照合および置換します
形式は次のとおりです。
"{0} {1}".format(value1, value2)
说明:按索引编号来匹配替换 {
索引} 的值。
例えば:
name = "王涛"
age = 25
year = 2002
month = 10
day = 22
prov = "河南省"
city1 = "新乡市"
city2 = "郑州市"
print("我叫{0},今年{1}岁了。".format(name,age))
print("李明的生日:{0}-{1}-{2}".format(year,month,day))
print("李明的生日:{1}-{2}-{0}".format(year,month,day))
print("{0}的地址:{1}{2};李明的地址:{1}{3}".format(name,prov,city1,city2))
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
我叫王涛,今年25岁了。
李明的生日:2002-10-22
李明的生日:10-22-2002
王涛的地址:河南省新乡市;李明的地址:河南省郑州市
3. キーワードインデックスに従って一致および置換
形式は次のとおりです。
"{关键字索引1} {关键字索引2}".format(关键字索引1 = value1, 关键字索引2 = value2)
例えば:
name1 = "王涛"
age1 = 25
year1 = 2002
month1 = 10
day1 = 22
print("我叫{name},今年{age}岁了。".format(name=name1,age=age1))
print("我叫{name},今年{age}岁了。".format(age=age1,name=name1))
print("李明的生日:{year}-{month}-{day}".format(day=day1,month=month1,year=year1))
print("李明的生日:{month}-{day}-{year}".format(day=day1,month=month1,year=year1))
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
我叫王涛,今年25岁了。
我叫王涛,今年25岁了。
李明的生日:2002-10-22
李明的生日:10-22-2002
4. リストインデックスによる文字列のフォーマット
形式は次のとおりです。
列表名=['列表值1','列表值2','列表值3'...]
"{List[列表索引1]},{List[列表索引2]}".format(List = 列表名)
说明:在format格式化时,可使用 * 对list拆分
例えば:
list1 = ["王涛",25]
list2 = [2002,10,22]
list3 = ["Tom","Jerry","Rose","Black"]
list4 = [25,22,20,24]
print("我叫{list[0]},今年{list[1]}岁了。".format(list=list1))
print("我叫{0[0]},今年{0[1]}岁了。".format(list1))
print("李明的生日:{list[0]}-{list[1]}-{list[2]}".format(list=list2))
print("李明的生日:{list[1]}-{list[2]}-{list[0]}".format(list=list2))
print("李明的生日:{0[1]}-{0[2]}-{0[0]}".format(list2))
print("{0[0]}的年龄为{1[1]};{0[1]}的年龄为{1[2]};{0[2]}的年龄为{1[0]};{0[3]}的年龄为{1[3]}。".format(list3,list4))
# 使用 *与** 对list进行拆分
print("李明的生日:{1}-{2}-{0}".format(*list2))
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
我叫王涛,今年25岁了。
我叫王涛,今年25岁了。
李明的生日:2002-10-22
李明的生日:10-22-2002
李明的生日:10-22-2002
Tom的年龄为22;Jerry的年龄为20;Rose的年龄为25;Black的年龄为24。
李明的生日:10-22-2002
5. 辞書を使用してフォーマットされた文字列を設定する
形式は次のとおりです。
字典名1={
'字典索引1':'字典索引1的值', '字典索引2':'字典索引2的值', ...}
"{字典索引},{字典索引值}".format(字典名1)
说明:在format格式化时,可使用 ** 对字典拆分
例えば:
dict1 = {
"name":"王涛","age":21}
dict2 = {
"year":2002,"month":10,"day":22}
print("我叫{0[name]},今年{0[age]}岁了。".format(dict1))
print("我叫{0},今年{1}岁了。".format(*dict1))
print("李明的生日:{0[year]}-{0[month]}-{0[day]}".format(dict2))
print("李明的生日:{0[month]}-{0[day]}-{0[year]}".format(dict2))
print("我叫{name},今年{age}岁了。生日:{year}-{month}-{day}".format(**dict1,**dict2))
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
我叫王涛,今年21岁了。
我叫name,今年age岁了。
李明的生日:2002-10-22
李明的生日:10-22-2002
我叫王涛,今年21岁了。生日:2002-10-22
6. 混合使用
(1) インデックスとパラメータ名を組み合わせて使用できます。
(2) 注: 名前付きパラメータは最後に配置する必要があります。そうしないと、コンパイル中にエラーが発生します。
(3) インデックスとデフォルトの書式を混在させることはできません。
(4) パラメータの部分参照をサポートし、インデックスを通じてパラメータ部分の値を取得できます。
例えば:
list1 = ["王涛",21]
dict1 = {
"year":2002,"month":10,"day":22}
print("我叫{},生日为:{year}-{month}-{day},今年{}岁了。".format(*list1,**dict1))
print("我叫{},今年{age}岁了。".format("刘鹏",age=25))
# print("我叫{},今年{age}岁了。".format(age=25,"刘鹏")) #此代码错误,命名参数必须放在最后
print("我叫{},今年{1}岁了。".format("刘鹏",25)) #此代码错误,索引和默认格式化不可以混合使用
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
我叫王涛,生日为:2002-10-22,今年21岁了。
我叫刘鹏,今年25岁了。
Traceback (most recent call last):
File "C:\Python\Python38\First.py", line 6, in <module>
print("我叫{},今年{1}岁了。".format("刘鹏",25))
ValueError: cannot switch from automatic field numbering to manual field specification
3. フォーマット文字列
1. 書式設定された文字列を左寄せして埋める
形式は次のとおりです。
:< # 左对齐填充
< # 左对齐,后面带宽度
: # 后面带填充的字符,只能是一个字符,不指定则默认是用空格填充
例えば:
print('{:<10}!'.format('China')) # 默认填充空格
print('{:0<10}!'.format('China')) # 用0填充
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
China !
China00000!
包括的なアプリケーション:
products=[["苹果",16.88],["香蕉",22.56],["西瓜",30.2],["西红柿",4.99]]
print("=="*5+"商品列表"+"=="*5)
i=1
for product in products:
print('{:0<6}\t{:<10}\t{:<10.1f}'.format(i, product[0], product[1]))
i = i+1
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
==========商品列表==========
100000 苹果 16.9
200000 香蕉 22.6
300000 西瓜 30.2
400000 西红柿 5.0
2. 書式設定された文字列を右揃えで埋め込む
形式は次のとおりです。
:> # 右对齐
> # 右对齐,后面带宽度,
: # 后面带填充的字符,只能是一个字符,不指定则默认是用空格填充
例えば:
print('国家:{:>10}!'.format('China')) # 默认填充空格
print('国家:{:0>10}!'.format('China')) # 用0填充
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
国家: China!
国家:00000China!
包括的なアプリケーション:
products=[["苹果",16.88],["香蕉",22.56],["西瓜",30.2],["西红柿",4.99]]
print("=="*5+"商品列表"+"=="*5)
i=1
for product in products:
print('{:0>6}\t{:<10}\t{:>10.1f}元'.format(i, product[0], product[1]))
i = i+1
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
==========商品列表==========
000001 苹果 16.9元
000002 香蕉 22.6元
000003 西瓜 30.2元
000004 西红柿 5.0元
3. 書式設定された文字列を中央揃えで埋め込む
形式は次のとおりです。
:^ # 居中对齐
^ # 居中对齐,后面带宽度
: # 后面带填充的字符,只能是一个字符,不指定则默认是用空格填充
例えば:
print('国家:{:^10}!'.format('China')) # 默认填充空格
print('国家:{:0^10}!'.format('China')) # 用0填充
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
国家: China !
国家:00China000!
包括的なアプリケーション:
products=[["苹果",16.88],["香蕉",22.56],["西瓜",30.2],["西红柿",4.99]]
print("=="*5+"商品列表"+"=="*5)
i=1
for product in products:
print('{:0>6}\t{:^10}\t{:>10.1f}元'.format(i, product[0], product[1]))
i = i+1
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
==========商品列表==========
000001 苹果 16.9元
000002 香蕉 22.6元
000003 西瓜 30.2元
000004 西红柿 5.0元
4. format() メソッドの包括的な適用
(1) 左詰めパターンを印刷する
コードは以下のように表示されます。
for i in range(1, 11):
print("{:<{}}".format("*" * i, 10))
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
*
**
***
****
*****
******
*******
********
*********
**********
(2) 右詰めパターンを印刷する
コードは以下のように表示されます。
for i in range(1, 11):
print("{:>{}}".format("*" * i, 10))
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
*
**
***
****
*****
******
*******
********
*********
**********
(3) 中央揃えパターンを印刷する
コードは以下のように表示されます。
for i in range(1, 21, 2):
print("{:^{}}".format("*" * i, 20))
程序运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************