Python中f‘‘、str.format()和str%()的字符串格式化详解(2)------格式占位符的使用,日期、时间格式使用

这篇具有很好参考价值的文章主要介绍了Python中f‘‘、str.format()和str%()的字符串格式化详解(2)------格式占位符的使用,日期、时间格式使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录
四、 f''、str.format()和str%()格式化表达式中格式占位符的使用
1、实现进制(或格式)的转换与冒号:
2、实现对象的字符串形式转换与感叹号!
3、为对象指定宽度或精度
4、对对象取百分比
5、为对象增加正号+或负号-
6、为对象增加标志(flags)
五、 f''、str.format()和str%()格式化表达式的日期、时间格式使用

四、 f''、str.format()和str%()格式化表达式中格式占位符的使用

       前面我们使用str%()格式化表达式,占位符会增加符号%,表示该位置产生某种格式的数据,对于f''、str.format()格式化表达式使用占位符时采用的是其它符号,比如:冒号:,感叹号!。f''、str.format()格式化表达式使用占位符时大多数情形都是要增加冒号: (它一般表示使用占位符的意思),就像str%()格式化表达式,占位符会增加符号%一样。下面重点说明f''、str.format()的占位符的使用,也会附带str%()格式化表达式的使用。f''字符串格式化通常称为f-string字符串格式化。

1、实现进制(或格式)的转换与冒号:

       在f''、str.format()格式表达式中使用格式占位符,通常会增加冒号:。其中,采用:b,:o,:x,能将十进制转换为二进制、八进制和十六进制。这里以八进制为例,下面是str%()、f''、str.format()格式化表达式的进制转换。

print(f'十进制转换为八进制:{23:o},{25:o}')
print('十进制转换为八进制:{:o},{:o}'.format(23,25))
print('十进制转换为八进制:{1:o},{0:o}'.format(23,25))
print('十进制转换为八进制:%o,%o'%(23,25))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

        下面是整型与浮点型的转换。在Python中,浮点型默认7位小数,不足的默认用0填充。

ne1=12.73
ne2=15
#对于f'',ne1为十进制浮点型时,不支持占位符d,ne2为整型的十进制整数d,支持占位符f。
print(f'{ne1:f},{ne2:d}')
print(f'{ne1:f},{ne2:f}')

print('\n')
#对于str.format(),ne1为十进制浮点型时,不支持占位符d,ne2为整型的十进制整数d,支持占位符f。
print('{:f},{:d}'.format(ne1,ne2))
print('{:f},{:f}'.format(ne1,ne2))
print('{1:f},{0:f}'.format(ne1,ne2))

print('\n')
#对于str%()支持,支持占位符d与f之间的转换。
print('%f,%d'%(ne1,ne2))
print('%d,%f'%(ne1,ne2))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       注意,对于f''、str.format()格式化表达式的占位符是可以缺省的,当然与占位符有关的冒号:不能缺省,它表示使用占位符的意思,这时按默认占位符,但str%()中的占位符是不能缺省的。

ne1=12.73
ne2=15
sr1='abcde'



#占位符可以缺省,缺省时按默认的占位符。
print(f'{ne1:},{ne2:},{sr1:}')

print('\n')
print('{:},{:},{:}'.format(ne1,ne2,sr1))
print('{1:},{2:},{0:}'.format(ne1,ne2,sr1))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       为增强可读性,下面应用中,很少缺省占位符,但在缺省时,应该知道这一点。

2、实现对象的字符串形式转换与感叹号!

       在f''、str.format()格式表达式中使用r,a,s格式占位符,需要增加感叹号!,能把对象转换相应的字符串形式。其中,s也可以用在冒号:后面,也表示字符串格式,感叹号!主要针对占位符r,a。

sr1='你好,python\n'
it1=12
print(f'{sr1!r},{it1!r}')
print(f'{sr1!a},{it1!a}')
print(f'{sr1!s},{it1!s}')

print('\n')
print('{!r},{!r}'.format(sr1,it1))
print('{1!r},{0!r}'.format(sr1,it1))
print('{!a},{!a}'.format(sr1,it1))
print('{1!a},{0!a}'.format(sr1,it1))
print('{!s},{!s}'.format(sr1,it1))
print('{1!s},{0!s}'.format(sr1,it1))

print('%r,%r'%(sr1,it1))
print('%a,%a'%(sr1,it1))
print('%s,%s'%(sr1,it1))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

3、为对象指定宽度或精度

       宽度(width)适合数字型和字符串型,宽度表示占位个数,宽度大于对象默认位数时才有效,当宽度小于或等于对象默认位数时,对象按默认位数。宽度(width)可以用表1-1占位符中的n表示。

       当宽度大于对象默认位数时,若对象是数字型,f''、str.format()默认右对齐(向右边靠齐),多的位数在左端填充空格(一个空格占一位),若对象是字符串型,f''、str.format()默认左对齐,多的位数在右端填充空格,而对于str%()都是默认右对齐,多的位数在左端填充空格。

       另外,在python中,对于一般的浮点型(float),或整型(int)转换为浮点型,对象默认的小数位数是7,小数位数不足的会自动0补充,构成7位小数,宽度是按这个基础来判断的。    

       f''、str.format()格式化表达式使用占位符时通常都是要增加冒号:,str()格式化表达式使用占位符时通常要增加%。在没有指定宽度时,f''、str.format()、str()格式化表达式默认都是左对齐的。

ne1=12.73
sr1='abcde'

print(f'{ne1:10f},{sr1:7s}')

print('\n')
print('{:2f},{:7s}'.format(ne1,sr1))
print('{1:2s},{0:12f}'.format(ne1,sr1))

print('\n')
print('%2f,%2s'%(ne1,sr1))
print('%10f,%7s'%(ne1,sr1))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       精度(precision)在数学中表示保留小数位数,这里取广义,精度(precision)是针对数字型或字符串型来讲的。精度可以用表1-1占位符中的.m表示。

       对于浮点数来讲,精度是保留小数位数(个数,按四舍五入取舍),当精度超过小数的位数时,补充0,而且精度不适合整型。

       对于字符串来讲,精度是保留字符的位数(个数),当精度超过对象的位数,返回原对象。

       但对于整数,f''、str.format()的精度不适合整数,而str%()的精度对于整数来讲,当精度大于整数位数(个数),多的左边增加0。

       精度与宽度不同,精度是有取舍的,可能会改变对象自身,而宽度是确定是否增加位数,不对对象自身造成改变。而且单独使用精度(不与宽度一起使用),f''、str.format()、str%()都是左对齐(向左边靠齐)。

ne1=15.0928
ne2=627
sr1='abcde'

#f''精度不支持整数。
print(f'{ne1:.1f},{ne1:.2f},{ne2:.1f},{sr1:.1s}')

print('\n')
#str.format()精度不支持整数。
print('{:.1f},{:.2f},{:.2f},{:.2s}'.format(ne1,ne1,ne2,sr1))
print('{1:.1f},{2:.7s},{0:.5f}'.format(ne1,ne1,sr1))

print('\n')
#str%()对于整数的精度,当精度大于整数位数(个数),多的左边增加0。
print('%.1f,%.2f,%.4d,%.2s'%(ne1,ne1,ne2,sr1))
print('%.3d,%.3f,%.2d,%.8s'%(ne1,ne1,ne2,sr1))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       宽度和精度经常一起使用,这时候宽度是精度处理后的结果的作用,也即先做精度处理,然后根据这个处理的结果再做宽度处理(注意,不是对原对象进行宽度处理)。当宽度和精度一起使用时,f''、str.format()、str%()的字符串格式化的对齐由宽度确定。宽度和精度可以用表1-1占位符中的n.m表示。

ne1=12.73
ne2=15.0928
sr1='abcde'

print(f'{ne1:7.1f},{ne2:5.1f},{sr1:2.1s}')

print('\n')
print('{:3.2f},{:6.2f},{:1.2s}'.format(ne1,ne2,sr1))
print('{1:7.2f},{2:4.2s},{0:5.5f}'.format(ne1,ne2,sr1))

print('\n')
print('%3.5f,%5.1f,%2.8s'%(ne1,ne2,sr1))

print('%3.1f,%4.1f,%3.2s'%(ne1,ne2,sr1))
#上面书写形式等价于下面形式。
print('%*.1f,%*.1f,%*.2s'%(3,ne1,4,ne2,3,sr1))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       上面宽度和精度是针对整型、浮点型和字符串型的一般情形,宽度和精度还可以用在科学计数法和有效数字这种特别情形,宽度的使用原则同上,精度的使用稍有差异。

        科学计数法z*e**k,k是指数,e是底数,在计算机中,e相当于10, z是大于或等于1,且小于10,保留小数位数(个数)由z来确定。

        宽度和精度也可以用在科学计数法,科学计算法中占位符为e(或E),精度是确定z保留的小数位数(个数),然后宽度再对科学计数法进行判断处理。

ne1=15.7634317
ne2=15.7634317

print(f'{ne1:12.2e},{ne2:6.3e}')

print('\n')
print('{:6.2e},{:12.3e}'.format(ne1,ne2))
print('{1:10.2e},{0:11.5e}'.format(ne1,ne2))

print('\n')
print('%10.2e,%e'%(ne1,ne2))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       有效数字是针对数字型的。有效数字是指从该数的第一个非零数字起,直到末尾数字为止的数字。保留有效数字时遇到小数也是按四舍五入来取舍。精度与占位符g联用有保留有效数字的作用,此时,精度是指保留有效数字的位数(个数),宽度再对这个结果进行判断处理。

       上面科学记数法中的有效数字也是由z来确定。在f''、str.format()的字符串格式化中的精度后面缺省占位符,会默认对象按有效数字处理(也即默认为g来处理),精度表示保留有效数字的位数(个数)。在进行有效数字处理时,有时候会用到科学记数法,因为科学记数法中的有效数字是由z来确定,对于整数可以用它来表示有效数字。

ne1=15.7634317
ne2=15.7634317
ne3=12680

print(f'{ne1:12.2g},{ne2:6.3g},{ne3:6.3g}')
#精度后面缺省占位符,会默认对象按有效数字处理,精度表示保留有效数字的位数(个数)。
print(f'{ne1:12.2},{ne2:6.3},{ne2:6.3f},{ne2:6}')

print('\n')
print('{:2.2g},{:12.3g}'.format(ne1,ne2))
#精度后面缺省占位符,会默认对象按有效数字处理,精度表示保留有效数字的位数(个数)。
print('{1:10.2g},{0:11.5}'.format(ne1,ne2))
print('{:2.2},{:12.3}'.format(ne1,ne2))

print('\n')
print('%10.2g,%g'%(ne1,ne2))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

         另外,对于f''的字符串格式化中的宽度和精度还可以用{整数}.{整数}表示。

ne1=15.7634317
sr1='abcde'

print(f'{ne1:6.3},{ne1:6.3f},{sr1:6.2s},')
print(f'{ne1:{6}.{3}},{ne1:{6}.{3}f},{sr1:{6}.{2}},{sr1:{6}.{2}s}')

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       注意,上面代码中缺省占位符的,使用默认占位符,比如:6.3、{6}.{3}默认为有效数字的处理,{6}.{2}默认为字符串的处理。

4、对对象取百分比

       对对象取百分比,使用占位符%,对于f''、str.format()格式化表达式,不能有其它占位符,在执行时,无论是浮点数还是整数,自动先在数值的基础上扩大100倍,然后取精度,再增加一个百分比符号。

        而str%()需要在其它占位符后面用%%,在执行时,先执行其它占位符,再取精度,然后增加一个百分比符号,而没有扩大100倍。注意,str%()的浮点数和整数的精度使用是有差异的。

ne1=15.7634317
ne2=15

print(f'{ne1:.2%},{ne2:.2%}')

print('\n')
print('{:.2%},{:.2%}'.format(ne1,ne2))

print('\n')
#下面先取浮点数,再取精度,然后再增加符号%。
print('%.3f%%,%.3f%%'%(ne1,ne2))
#下面先取整数,再取精度,精度大于整数位数时,多的在左边增加0,然后再增加符号%。
print('%.3d%%,%.3d%%'%(ne1,ne2))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

5、为对象增加正号+或负号-

      正负号是针对数字型对象而言的。+与占位符联用可以表示正号(也即在冒号:或%后面使用),而且会显式+(即对象会增加符号+),在对象(包括名称name)中增加+,不显式+。

      对象为负数,即使增加+,也不显示+,对象为正数,即使增加-,也不显示-,而且-与占位符联用不表示负号的意思,-与名称name联用才表示负号(对于关键字实参,直接在对象上增加-),会显式-。

ne1=15.7634317
ne2=15.7634317

print(f'{ne1:+9.2f},{ne1:-9.2f},{-ne2:9.2f},{+ne2:9.2f}')

print('\n')
print('{:+9.2f},{:9.2f},{z:5.1f}'.format(ne1,-ne2,z=-3.26))
print('{0:+9.2f},{1:-9.2f},{1:9.2f}'.format(ne1,+ne2))

print('\n')
print('%+9.2f,%-9.2f'%(ne1,ne2))
print('%+9.2f,%9.2f'%(-ne1,-ne2))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       注意,这里讲的+、-表示正负号(也叫做sign设置),而不是作为填充(fill)符号,下面会讲到填充符号。

6、为对象增加标志(flags)

       标志(flags) 表示某些约定的符号,格式里会产生这种符号或产生某种效果。这里把冒号: (或%)后面与占位符一起使用的其它符号都看作是标志(flags),以减少过多的区分,其它位置的符号不看作是标志。下面主要从实现功能的角度进行区分,这样我们不再区分fill、align、sign、grouping_option,实际它们只是代表对应功能的符号的整体称呼。

(1)0与宽度联用,可以用0填充

      0与宽度联用,宽度大于对象位数时,多的位数用0填充(fill),而不是默认用空格填充。对于str%()格式化表达式,0与宽度联用不适合字符串型。注意这里0是与宽度联用。

ne1=15.7634317
ne2=15.7634317
sr1='abcde'
lt1=[192, 168, 0, 1]

print(f'{ne1:09.2f},{ne2:02.2f},{sr1:09.2s}')

print('\n')
print('{:02.2f},{:07.2f},{:09.2s}'.format(ne1,ne2,sr1))
print('{1:02.3f},{0:09.5f},{2:07.3s}'.format(ne1,ne2,sr1))
#*lt1是一个位置参数,*具有解包作用,*lt1解包为三个数字类型的对象,
#也即三个整数的位置实参,参见前面关于解包、参数的知识。
#下面{}按顺序对应,省去了序数,X是十六进制,2是宽度(width),
#打印时默认右对齐,内容不够时用0在左边填充。
print('{:02X}{:02X}{:02X}{:02X}'.format(*lt1))

print('\n')
#对于str%()格式化表达式,0与宽度联用不适合字符串。
print('%09.2f,%02.2f,%09.2s'%(ne1,ne2,sr1))
print('%09.2f,%02.2f,%9.2s'%(ne1,ne2,sr1))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

(2)对数字型对象的左侧手动添加一个空格

      当宽度大于对象(若有精度,应该取完精度后的对象)的位数,采用默认的填充空格,而手动添加的空格无效,反之,手动添加空格有效,而且,f''、str.format()的冒号:后面只能添加一个空格,str%()的符号%后面即使添加多个空格,也实际只一个空格有效。

ne1=15.763

print(f'{ne1: .1f},{ne1: f}')
print(f'{ne1: 5.1f}')
print(f'{ne1: 2.1f}')

print('\n')
print('{: .2f}'.format(ne1))
print('{:5.2f}'.format(ne1))
print('{: 5.2f}'.format(ne1))

print('\n')
print('%        .2f'%ne1)
print('%7.2f'%ne1)
print('% 7.2f'%ne1)

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

(3)控制左对齐、右对齐或居中对齐(-、<、>、^、=)及填充

       -与占位符联用,用来左对齐(向左边靠齐),实际只适合str%()格式化表达式。-与占位符联用使得原来默认的右对齐变为左对齐,默认左对齐的不变。左对齐后,对于宽度的使用,宽度大于对象位数时,默认右边空格填充。不指定宽度和精度,-不产生作用,相当于按默认位数。

       -与占位符联用不表示负号的意思,-与名称name联用才表示负号(对于关键字实参,直接在对象上增加-)。

ne1=15.7634317
ne2=15.7634317
sr1='abcde'

#f''中-只能对数字型由作用,但没作用。
print(f'{ne1:9.2f},{ne2:.2f},{sr1:9.2s}')
print(f'{ne1:-9.2f},{ne2:-.2f},{sr1:9.2s}')
#下面实际等效于print(f'{ne1:f},{ne2:f},{sr1:s}')
print(f'{ne1:-f},{ne2:-f},{sr1:s}')

print('\n')
#str.format()中-只能对数字型由作用,但没作用。
print('{:2.2f},{:7.2f},{:9.2s}'.format(ne1,ne2,sr1))
print('{:-2.2f},{:-7.2f},{:9.2s}'.format(ne1,ne2,sr1))
#下面实际等效于print('{:f},{:f},{:s}'.format(ne1,ne2,sr1))
print('{:-f},{:-f},{:s}'.format(ne1,ne2,sr1))

print('\n')
#str%()中用-后左对齐,原来默认的右对齐的变为左对齐,默认左对齐的不变。
print('%9.2f,%.2f,%9.2s'%(ne1,ne2,sr1))
print('%-9.2f,%-.2f,%-9.2s'%(ne1,ne2,sr1))
#下面实际等效于print('%f,%f,%s'%(ne1,ne2,sr1))
print('%-f,%-f,%-s'%(ne1,ne2,sr1))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       <与占位符联用,用来左对齐,只适合f''、str.format()格式化表达式。<与占位符联用使得原来默认的右对齐的变为左对齐,默认左对齐的不变。左对齐后,对于宽度的使用,宽度大于对象位数时,默认右边空格填充。不指定宽度和精度,<不产生作用,相当于按默认位数。

ne1=15.7634317
ne2=15.7634317
sr1='abcde'

#f''中用<后左对齐,原来默认的右对齐的变为左对齐,默认左对齐的不变。
print(f'{ne1:<9.2f},{ne2:<.2f},{sr1:<9.2s}')
#下面实际等效于print(f'{ne1:f},{ne2:f},{sr1:s}')
print(f'{ne1:<f},{ne2:<f},{sr1:<s}')

print('\n')
#str.format()中用<后左对齐,原来默认的右对齐的变为左对齐,默认左对齐的不变。
print('{:<2.2f},{:<7.2f},{:<9.2s}'.format(ne1,ne2,sr1))
#下面实际等效于print('{:f},{:f},{:s}'.format(ne1,ne2,sr1))
print('{:<f},{:<f},{:<s}'.format(ne1,ne2,sr1))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       >与占位符联用,用来右对齐,只适合f''、str.format()格式化表达式。<与占位符联用使得原来默认的左对齐的变为右对齐,默认右对齐的不变。右对齐后,对于宽度的使用,宽度大于对象位数时,默认左边空格填充。不指定宽度和精度,>不产生作用,相当于按默认位数。

ne1=15.7634317
ne2=15.7634317
sr1='abcde'

#f''中用>后右对齐,原来默认的左对齐的变为右对齐,默认右对齐的不变。
print(f'{ne1:>9.2f},{ne2:>.2f},{sr1:>9.2s}')
#下面实际等效于print(f'{ne1:f},{ne2:f},{sr1:s}'),
print(f'{ne1:>f},{ne2:>f},{sr1:>s}')

print('\n')
#str.format()中用>后右对齐,原来默认的左对齐的变为右对齐,默认右对齐的不变。
print('{:>2.2f},{:>7.2f},{:>9.2s}'.format(ne1,ne2,sr1))
#下面实际等效于print('{:f},{:f},{:s}'.format(ne1,ne2,sr1))
print('{:>f},{:>f},{:>s}'.format(ne1,ne2,sr1))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       ^与占位符联用,用来居中对齐(中间对齐),只适合f''、str.format()格式化表达式。^与占位符联用使得原来默认的左对齐或右对齐变为居中。居中后,对于宽度的使用,宽度大于对象位数时,默两边空格填充,偶数时两边填充是对称的,奇数时右边多一个。不指定宽度和精度,^不产生作用,相当于按默认位数。

ne1=15.7634317
ne2=15.7634317
sr1='abcde'

#f''中用^后居中。
print(f'{ne1:^9.2f},{ne2:^.2f},{sr1:^3.2s}')
#下面实际等效于print(f'{ne1:f},{ne2:f},{sr1:s}'),
print(f'{ne1:^f},{ne2:^f},{sr1:^s}')

print('\n')
#str.format()中用^后居中。
print('{:^2.2f},{:^7.2f},{:^9.2s}'.format(ne1,ne2,sr1))
#下面实际等效于print('{:f},{:f},{:s}'.format(ne1,ne2,sr1))
print('{:^f},{:^f},{:^s}'.format(ne1,ne2,sr1))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       上面<、>、^的左对齐、右对齐、居中统称为align设置,<、>、^可以用任何字符进行填充(fill),比如:*、&、0、¥、$、a等。

ne1=15.7634317
ne2=15.7634317
sr1='abcde'
print(f'{ne1:&<9.2f},{ne2:0<7.2f},{sr1:$<4.2s}')
print(f'{ne1:&>9.2f},{ne2:c>7.2f},{sr1:$>4.2s}')
print(f'{ne1:*^9.2f},{ne2:¥^7.2f},{sr1:$^4.2s}')

print('\n')
print('{:&<9.2f},{:0<7.2f},{:$<9.2s}'.format(ne1,ne2,sr1))
print('{:&>9.2f},{:d>7.2f},{:$>9.2s}'.format(ne1,ne2,sr1))
print('{:*^2.2f},{:&^7.2f},{:0^9.2s}'.format(ne1,ne2,sr1))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       =与占位符联用,只适合f''、str.format()格式化表达式中数字型对象,按默认的对齐(比如:按宽度或精度的对齐),但当=前面有符号(这里的符号不包括名称name)时,这个符号将放在最左侧。对于宽度的使用,右对齐后,宽度大于对象位数时,默认左边空格填充(若指定填充符号,按该符号填充)。

ne1=15.7634317
ne2=15.7634317

#=不仅可以使用符号填充,而且能对前面的负号-产生作用,使其放在最左侧。
print(f'{ne1:9.2f},{ne1:=9.2f},{ne2:*=9.2f},{ne2:*=2.2f}')
print(f'{-ne1:=9.2f},{-ne2:9.2f}')
#下面实际等效于print(f'{ne1:f},{ne2:f}'),
print(f'{ne1:=f},{ne2:=f}')

print('\n')
print('{:9.2f},{:&=9.2f}'.format(ne1,ne2))
print('{:9.2f},{:=9.2f}'.format(ne1,-ne2))
#下面实际等效于print('{:f},{:f}'.format(ne1,ne2))
print('{:=f},{:=f}'.format(ne1,ne2))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       =实际没有对齐效果,是按默认的对齐,但它能使前面的符号(这里的符号不包括名称name)放在最左侧。上面代码中的负号,对于上面讲到的<、>、^等对齐方式是不能产生类似效果的,<、>、^等对齐方式是把负号当着对象的局部,而=不是把负号看作对象的部分,实际把对象与负号分开看待。

       另外,=在f''格式化表达式中与name联用(若有冒号:,则=在冒号:前面),表示符号=自身,类似赋值的符号。

ne1=15.7634317
sr1='abcd'
lt1=[1,2,3]
#下面使用了占位符,但缺省。
#占位符可以缺省,缺省时按默认的占位符。
#str.format()不支持下面的表达方式。
print(f'{ne1=:9.2f},{ne1=:9.2},{ne1:},{sr1=:.2s},{sr1=:.2},{sr1=:}')
print(f'{-ne1=:9.2f},{-ne1=:9.2},{-ne1:}')

print('\n')
#下面没用到冒号:,没用到占位符。
#下面前后有多少空格,都会在对应位置增加多少空格,
#但这里的空格不能用其它符号替代。
#str.format()不支持下面的表达方式。
print(f'{    ne1=   }')
print(f'{    sr1=   }')

print('\n')
#下面实际没用到冒号:,没用到占位符,与上面使用不同,
#下面的使用实际是增加了字符描述,前面已经讲述。
print(f'a={lt1[0]},b={lt1[1]}')
#str.format(),虽然format只有一个位置参数,但下面是对lt1局部取值,因而序数0不能缺省。
print('a={0[0]},b={0[1]}'.format(lt1))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

       注意,上面代码中缺省占位符后,代码运行时按默认占位符执行,上面代码中9.2按默认为有效数字的科学记数法的处理。

(4)对对象的整数部分进行分组

      可以通过逗号,或下划线_对数字型的整数部分进行分组,以3位为一组,这种操作也叫做grouping_option分组设置。有宽度或精度时,符号,或_应该放在宽度的后面,放在精度的前面。分组实际对整型有效,对浮点型无效。

ne1=1538.763
ne2=12000
ne3=15.763

print(f'{ne1:,f};{ne2:,};{ne2:,d};{ne2:9,};{ne2:9,d};{ne3:,f}')
print(f'{ne1:_f};{ne2:_};{ne2:_d};{ne2:9_.2f};{ne2:9_d}')

print('\n')
print('{:,f};{:_d};{:,f}'.format(ne1,ne2,ne3))
print('{:9,.2f};{:9,.2f};{:,f}'.format(ne1,ne2,ne3))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

         注意,上面代码中缺省占位符后,代码运行时按默认占位符执行。

(5)二、八、十六进制的对象显示对应的0b、0o、0x

       符号#(或#0)与进制占位符联用,使得二进制对象增加0b、八进制对象增加0o、十六进制对象增加0x。注意,str%()不支持二进制。

ne1=17

print(f'{ne1:#b},{ne1:#o},{ne1:#x}')
print(f'{ne1:#0b},{ne1:#0o},{ne1:#0x}')#也可以用#0

print('\n')
print('{0:#b},{0:#o},{0:#x}'.format(ne1))
print('{0:#0b},{0:#0o},{0:#0x}'.format(ne1))#也可以用#0

print('\n')
#str%()不支持二进制。
print('%#o,%#x'%(ne1,ne1))
print('%#0o,%#0x'%(ne1,ne1))#也可以用#0

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

      上面分别讲述了占位符的使用情况,我们可以几种功能一起使用,这里不列举实例,具体把上面的功能组合在一起使用即可。

五、 f''、str.format()和str%()格式化表达式的日期、时间格式使用

       对日期、时间的字符串格式化适合f''、str.format()格式化表达式,而且这里的日期、时间的格式符号不同于前面讲到的占位符,为了区分开来,这里称为日期格式符、时间格式符,日期格式符、时间格式符都会有一个符号%,再加上一个字母构成。f''、str.format()表示日期、时间格式,是冒号:与日期格式符、时间格式符联用。

        常用的日期、时间格式符如下表5-1所示。

表5-1 日期、时间格式符

%Y

四位数的年份(0000-9999)

%y

两位数的年份(00-99)

%B

英文月份(比如:November)

%m

月份(01-12)

%D

月/日/年(比如:12/05/23)

%d

天(01-31)

%H

24制小时(00-23)

%h

简写字母月份(比如:Nov)

%I

12制小时(01-12)

%p

A.M.(上午)或P.M.(下午)

%M

分钟(00-59)

%j

一年的第几天(001-366)

%S

秒(00-59)

%f

微秒

%X

时间(比如:10:32:02)

%x

日期(比如:01/16/23)

%A

英文星期(比如:Sunday)

%a

简写字母星期(比如:Sun)

%W

一年的第几个星期(00-53),星期一为星期的开始

%w

星期几(0-6),星期日为星期的开始

%U

一年的第几个星期(00-53),星期日为星期的开始

%u

星期几(1-7),星期一为星期的开始

%Z

本地时区名称,若无则返回空字符,本地可理解为当前设备的。

%c

日期和时间的默认表示(比如:Sun Nov  5 12:32:02 2023)

%%

表示符号%

       上面表5-1的日期、时间格式符一般适合f''、str.format()格式化表达式,f''、str.format()表示日期、时间在表达上有一定的局限,实际上,日期、时间的格式表示有对应的函数(或方法),比如:datetime、time模块。

       python对日期和时间的获取有很多方式,这里不展开讨论,这里给一个代码实例来展现f''、str.format()对日期、时间的格式化表示,代码中的日期格式符、时间格式符代表的作用可以结合打印结果理解,日期格式符、时间格式符之间可以用符号隔开,一般可以用逗号,日期格式符、时间格式符的字母大小写代表不同的作用。

import datetime

de1= datetime.datetime(year=2023,month=11,day=5)
print(de1)
print(f'{de1:%B %D,%Y};{de1:%m %D,%Y};{de1:%b,%d,%y};{de1:%B,%Y,%d}')
print('{0:%B,%d,%Y,%A},{0:%B-%d-%Y}'.format(de1))

print('\n')
de1= datetime.datetime(year=2023,month=11,day=5,hour=12,minute=32,second=2,microsecond=20)
print(de1)
print(f'{de1:%B %D,%Y,%H,%M,%S,%f,%a}')
print('{:%m %D,%Y,%H,%M,%S,%f}'.format(de1))

print('\n')
de1= datetime.date.today()
print(de1)
print(f'{de1:%B %d,%Y};{de1:%b,%d,%Y};{de1:%B,%y,%d}')
print('{0:%m,%D,%Y};{0:%b %d,%y}'.format(de1))

print('\n')
de1=  datetime.datetime.now()
print(de1)
de2=de1.date()#获取日期
print(de2)
de3=de1.time()#获取时间
print(de3)
print(f'{de1:%B,%D,%Y,%H,%M,%S}')
print('{:%m,%D,%Y};{:%H:%M:%S}'.format(de2,de3))

运行结果:

python f,computer,format,日期 时间,宽度 精度,str,f-string,python f,datetime

Python中f‘‘、str.format()和str%()的字符串格式化详解(1):

https://blog.csdn.net/thefg/article/details/130940550文章来源地址https://www.toymoban.com/news/detail-757714.html

最后, 欢迎你点赞、收藏、关注!

到了这里,关于Python中f‘‘、str.format()和str%()的字符串格式化详解(2)------格式占位符的使用,日期、时间格式使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第33讲:Python格式化字符串时使用字典传递字符串

    在前面对字符串进行格式化输出时,传递被格式化的字符串时都是单个的,如果想要对字典中Key对应的Value进行格式化输出,常规的方法如下:

    2023年04月24日
    浏览(54)
  • 【Python入门篇】——Python基础语法(字符串格式化,表达式格式化和数据输入)

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句,Python函数,Python的数据容器等。 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 目前通过%符号占位

    2024年02月05日
    浏览(59)
  • Python 用户输入和字符串格式化指南

    Python 允许用户输入数据。这意味着我们可以向用户询问输入。在 Python 3.6 中,使用 input() 方法来获取用户输入。在 Python 2.7 中,使用 raw_input() 方法来获取用户输入。以下示例要求用户输入用户名,并在输入用户名后将其打印在屏幕上: Python 3.6: Python 2.7: 为了确保字符串按预

    2024年02月05日
    浏览(83)
  • 9.Python从入门到精通—Python 字符串格式化,三引号,Unicode 字符串

    Python中的字符串格式化是指将一个字符串中的占位符替换为指定的值。Python中有多种字符串格式化的方法,以下是其中的几种常见方法: 使用百分号(%)进行字符串格式化 使用百分号(%)进行字符串格式化是Python中最早的字符串格式化方法。它的基本语法如下: 其中,格

    2024年03月20日
    浏览(60)
  • Python中格式化字符串输出的4种方式

    Python格式化字符串的4中方式 一、%号 二、str.format(args) 三、f-Strings 四、标准库模板 五、总结四种方式的应用场景’ 一、%号占位符 这是一种引入最早的一种,也是比较容易理解的一种方式.使用方式为: 1、格式化字符串中变化的部分使用占位符 2、变量以元组形式提供 3、变

    2024年02月06日
    浏览(53)
  • 插值字符串格式化代码中的感叹号(Python)

    在csdn上读到,插值字符串格式化代码中有“!”,进行了一番探究,了解到其中的一点“隐秘”,在此共享。🤪 (笔记模板由python脚本于2024年03月31日 09:27:59创建,本篇笔记适合 对Python字符串格式化有一定认知 的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网 :https://www

    2024年04月13日
    浏览(51)
  • 【Python入门篇】——Python基础语法(字符串扩展和格式化的精度控制)

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句,Python函数,Python的数据容器等。 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 字符串在Python中有

    2024年02月03日
    浏览(49)
  • Python数据分析实战-格式化字符串的两种方法(附源码和实现效果)

    实现功能 格式化字符串的两种方法 实现代码 实现效果 本人读研期间发表5篇SCI数据挖掘相关论文,现在某研究院从事数据挖掘相关科研工作,对数据挖掘有一定认知和理解,会结合自身科研实践经历不定期分享关于python机器学习、深度学习、数据挖掘基础知识与案例。 致力

    2024年02月13日
    浏览(47)
  • 24 - 格式化字符串

    笔者认为格式化字符串 (formatted string) 在任何语言里都值得单独拿出来做个笔记,因为它是编程中控制输出的重要一环。 官网的翻译为 “格式化字符串字面值”。比较常用的格式化方法。 在字符串前加上前缀 f 或 F ,通过 {expression} 替代区域 (replacement field),把需要表达的内

    2024年02月22日
    浏览(58)
  • 格式化字符串漏洞

    初学pwn,学到了格式化字符串漏洞,总结一下。 格式化字符串函数:格式化字符串函数就是将计算机内存中表示的数据转化为我们人类可读的字符串格式。 漏洞printf(s) 用 printf() 为例,它的第一个参数就是格式化字符串 :“Color %s,Number %d,Float %4.2f” 然后 printf 函数会根据

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包