python数组溢出_全网最细 Python 格式化输出用法讲解

文章内容文件目录

一、应用 print() 涵数

二、应用 str.format() 方式

三、详细说明 format() 涵数

应用一:格式转化

应用二:形成数据信息序号

应用三:恢复出厂设置十进制整数金额

应用四:恢复出厂设置浮点数

应用五:恢复出厂设置百分比

应用六:恢复出厂设置科学记数法

应用七:恢复出厂设置额度

应用八:恢复出厂设置标识符

应用九:进制转换

应用十:恢复出厂设置日期和時间

四、应用 f-string 方式

一、应用 print() 涵数

在 Python 中,print() 涵数适用恢复出厂设置輸出,与 C 語言的 printf 相近。

1. 恢复出厂设置輸出字符串数组和整数金额

【实例1】輸出字符串数组 AmoXiang,并测算、輸出它的字符长度

str1 = "%s.length = %d" % ("AmoXiang", len("AmoXiang"))

print(str1) # 輸出AmoXiang.length = 8

% 在字符串数组中表明恢复出厂设置操作符,它后边务必额外一个恢复出厂设置标记,实际表明以下表所显示。

a80d1074918e60a51da38cd3dcfbac3c.png

%()元组能够包括一个或好几个值,如自变量或关系式,用于向字符串数组中%操作符传送值,元组包括原素总数、次序都务必与字符串数组中%操作符一一对应,不然将抛出异常。

%()元组务必坐落于字符串数组的后边,不然失效。假如字符串数组中只包括一个%操作符,那麼还可以立即传送值。比如:str1 = "AmoXiang.length = %d" % len("AmoXiang")

print(str1) # 輸出AmoXiang.length = 8

2. 恢复出厂设置輸出不一样进制数

【实例2】应用 print() 涵数把数据輸出为十六进制、十进制、八进制文件格式的字符串数组。

num = 123

# 輸出:Hex = 7b Dec = 123 Oct=173

print("Hex = %x Dec = %d Oct=%o" % (num, num, num))

填补:整数金额种类包含十进制整数金额、八进制整数金额、十六进制整数金额和二进制整数金额。

十进制的整数金额不可以以 0 开始。

八进制整数金额由 0~7 构成,逢八进一,以 0o 或 0O 开始,比如:0o23

十六进制整数金额由 0~9 及其 a~f 构成,逢十六进一,以 0x 或 0X 开始。比如:0x23

二进制整数金额由 0 和 1构成,逢二进一,以 0b 或 0B 开始。比如:0b101

有关进制这一知识要点不明白的阅读者能够点一下 进制转换 学习培训

3. 恢复出厂设置輸出浮点数

【实例3】把数据輸出为不一样文件格式的浮点数字符串数组。

PI = 3.141592653

print("pi1 = .3f" % PI) # 总总宽为10,小数位精密度为3

print("pi2 = %.*f" % (3, PI)) # *表明从后的元组中载入3,界定精密度

print("pi3 = 0.3f" % PI) # 用0添充空缺

print("pi4 = %-10.3f" % PI) # 左两端对齐,总总宽10个标识符,小数位精密度为3

print("pi5 = %+f" % PI) # 在浮点数前边表明正号

程序执行結果以下:

514d820b7de7d4025f72adc78c9e0552.png

在恢复出厂设置輸出数据或字符串数组时,能够额外輔助命令来健全恢复出厂设置实际操作。实际表明以下表所显示:

5927a3ed4c9a13370df105fdb10da5bc.png

二、应用 str.format() 方式

% 操作符是传统式恢复出厂设置輸出的基础方式,从 Python 2.6 版本号逐渐,为字符串数组数据信息增加了一种恢复出厂设置方式 str.format(),它根据 {} 操作符和 : 輔助命令来替代 % 操作符。

【实例1】根据部位数据库索引值

print('{0} {1}'.format('Python', 3.7)) # Python 3.7

print('{} {}'.format('Python', 3.7)) # Python 3.7

print('{1} {0} {1}'.format('Python', 3.7)) # 3.7 Python 3.7

在字符串数组中能够应用 {} 做为恢复出厂设置操作符。与 % 操作符不一样的是,{} 操作符能够根据包括的部位值自定引入值的部位,还可以反复引入。

【实例2】根据关键词数据库索引值

# 輸出:Amo年纪是18岁。

print('{name}年纪是{age}岁。'.format(age=18, name="Amo"))

【实例3】根据字符开展数据库索引

L = ["Jason", 30]

# 輸出:Jason年纪是三十岁。

print('{0[0]}年纪是{0[1]}岁。'.format(L))

根据应用 format() 涵数这类方便快捷的 投射 方法,目录和元组能够 打撒 成一般参数传递给 format() 方式,词典能够打撒成关键词主要参数给方式。format() 方式包括丰富多彩的文件格式限定符,附加在 {} 操作符中 : 标记的后边。

1. 添充与两端对齐

: 标记后边能够附加添充的标识符,默认设置为空格符, ^、 各自表明垂直居中、左两端对齐、右两端对齐,后边附加总宽规定值。

【实例4】下边实例设计输出 8 位标识符,并各自设定不一样的添充标识符合值两端对齐方法。

print('{:>8}'.format('1')) # 总总宽为8,右两端对齐,默认设置空格符添充

print('{:0>8}'.format('1')) # 总总宽为8,右两端对齐,应用0添充

print('{:a<8}'.format('1')) # 总总宽为8,左两端对齐,应用a添充

程序执行結果以下:

0023c7b6cb236a574d0219888da4d1fa.png

2. 精密度与种类f

【实例5】f 与 float 种类数据信息相互配合应用

print('{:.2f}'.format(3.141592653)) # 輸出結果:3.14

在其中 .2f 表明小数位后边的精密度为 2,f 表明浮点数輸出。

3. 进制数据輸出

【实例6】应用b、d、o、x 各自輸出二进制、十进制、八进制、十六进制数据。

num = 100

print('{:b}'.format(num)) # 1100100

print('{:d}'.format(num)) # 100

print('{:o}'.format(num)) # 144

print('{:x}'.format(num)) # 64

4. 百位数隔开輸出

【实例7】应用分号(,)輸出额度的千分位分节符。

print('{:,}'.format(1234567890)) # 1,234,567,890

三、详细说明 format() 涵数

format()涵数能够对数据信息开展恢复出厂设置解决实际操作。英语的语法文件格式以下:

014523c25e5df936e00d4a2c333656c2.png

format_spec为恢复出厂设置表述。当主要参数 format_spec 为空时,相当于涵数 str(value) 的方法。value 为要变换的数据信息。format_ spec 能够设定比较复杂的格式转化主要参数,形成较为完善的数据类型解决模版。format_spec 的撰写方法以下方式:

format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]

format_spec 文件格式控制符能够分成文本两端对齐、添充值、标示设定、恢复出厂设置、类型转换、百位数符(数据排序)等关键运用。优化归类表明如下图所显示:

a28d9a0f0c5d381f4b538f6d415de022.png

主要参数表明:

(1) fill(添充值):这里能够填好一切标识符,一般 与align、width一起应用,完成特定十位数标识符添充,一般 文件格式如图所示1.2所显示,添充实际效果及部位如图所示1.3所显示。

c85a8d841df3a9209230f3cf784c145c.png

一般 用 0、*、#、@ 等开展添充。如果不写添充值,则应用默认设置添充值,默认设置添充数值空格符。编码以下:

# 81@@@@@@@@

print(format(81, '@<10')) # 用@标记添充,总宽为10个空格符

# @@@@@@@@81

print(format(81, '@>10')) # 用@标记添充,总宽为10个空格符

(2) align(两端对齐方法):指在 width(数据总宽) 内輸出时的两端对齐方法,各自应用 、^、= 4个标记表明左两端对齐、右两端对齐、垂直居中两端对齐和数据添充(只用以数据,在标记后开展补足)。

(3) width(数据总宽):指设置輸出标识符总宽,假如数据信息的具体十位数比 width 特定总宽值大,则应用数据信息具体的长短。假如该值的具体十位数低于特定总宽,则十位数将设置的 fill 值添充或设置的 0 值添充,要是没有设定添充值,则用空格符添充。

s = "PYTHON"

print(format(s, '10')) # 沒有标识符,如果是字符串数组则默认设置左两端对齐,不够总宽一部分默认设置用空格符添充

print(format(13.14, '10')) # 沒有标识符,如果是数据则默认设置右两端对齐,不够总宽一部分默认设置用空格符添充

print(format(s, '0>10')) # 右两端对齐,不够特定总宽一部分用0添充

print(format(s, '>04')) # 右两端对齐,因标识符具体总宽超过特定总宽4,无需添充

print(format(s, '*>10')) # 右两端对齐,不够一部分用"*"添充

print(format(s, '>010')) # 右两端对齐,不够一部分用0添充

print(format(s, '>10')) # 右两端对齐,默认设置用空格符添充

print(format(s, '<10')) # 左两端对齐,默认设置用空格符添充

print(format(s, '<010')) # 左两端对齐,不够一部分用0添充

print(format(s, '@^10')) # 正中间两端对齐,不够一部分用'@'添充,总宽为10个空格符

print(format(13.14, '0<10')) # 左两端对齐,不够一部分用0添充

print(format(13.14, '@^10')) # 正中间两端对齐,不够一部分用@添充

print(format(13.14, '0>10')) # 右两端对齐,不够一部分用0添充

print(format(-13.14, '0=10')) # 右两端对齐,标记后边不够一部分用0添充

程序执行結果以下:

ab83b95145536d5693a10d1bfd80d0a2.png

(4) precision(精密度):精密度由小数位 . 开始。针对浮点数,精密度表明小数部分輸出的有效位数。针对字符串数组,精密度表明輸出的较大 长短。precision(精密度) 一般 和 type(种类) 配合起来应用。

(5) type(种类):表明輸出字符串数组、整数金额和浮点数种类的文件格式标准,默认设置为字符型 s。针对整数金额种类,輸出文件格式包含 7 种:

b:輸出整数金额的二进制方法。

c:輸出整数金额相匹配的 Unicode 标识符。

d:輸出整数金额的十进制方法。

n:輸出整数金额的十进制方法。

o:輸出整数金额的八进制方法。

x:輸出整数金额的小写字母十六进制方法。当值为整数金额时和 d 相近,数值浮点数时和 g 相近。不同点取决于 n 会应用当今地区设定来插进适度数据隔开标识符。

X:輸出整数金额的英文大写十六进制方法。

针对浮点数种类,輸出文件格式包含 7 种:

e:輸出浮点数相匹配的小写字母 e 的指数值方式。

E:輸出浮点数相匹配的英文大写字母 E 的指数值方式。

f:輸出浮点数的浮点表明方式,默认设置保存 6 位小数。

F:輸出浮点数的浮点表明方式,默认设置保存 6 位小数,无穷转化成英文大写字母 INF。

g:全自动调节将整数金额、浮点数转化成浮点型或科学记数法表明(超出 6 十位数用科学记数法),并将其恢复出厂设置到指定位置(如果是科学计数则是 e)。

G:全自动调节将整数金额、浮点数转化成浮点型或科学记数法表明(超出 6 十位数用科学记数法),并将其恢复出厂设置到指定位置(如果是科学计数则是 E)。

%:輸出浮点数的百分之方式。

应用一:格式转化

应用 format() 涵数能够转换视频格式。假如 format() 涵数的主要参数format_spec 未出示,则默认设置为将别的文件格式数据类型化作字符型,和启用 str(value) 实际效果同样。如:

import datetime

# 应用format()涵数将浮点数转化成标识符,結果为:'3.14'

print(format(3.14))

# 应用str()涵数将浮点数转化成标识符,結果为:'3.14'

print(str(3.14))

# 将日期恢复出厂设置为标识符,結果为:'2021-01-17 05:25:02'

print(format(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")))

设定主要参数 format_spec 的值,能够开展相对基本数据类型的恢复出厂设置,字符串数组能够出示的主要参数为 s。十进制整形出示的主要参数为 d 和 n,二进制的主要参数为 b,八进制的主要参数为 o,十六进制小写字母的主要参数为 x,十六进制英文大写的主要参数为 X,ASIIC 码的主要参数为 c,浮点数的主要参数为 f。之上恢复出厂设置后的基本数据类型都为字符型,举例说明以下:

print(format(12.2, 'f')) # 转化成浮点数,默认设置为小数保存6位,輸出:12.200000

print(format(12, 'd')) # 转化成十进制,輸出:12

print(format(13)) # 没有主要参数默认设置为十进制,輸出:13

print(format(13, 'n')) # 转化成十进制数,輸出:13

print(format(13, 'b')) # 转化成二进制,輸出:1101

print(format(65, 'c')) # 变换Unicode成标识符,輸出:A

print(format(97, 'c')) # 变换Unicode成标识符,輸出:a

print(format(8750, 'c')) # 变换Unicode成标识符,輸出:∮

print(format(12, 'o')) # 转化成八进制,輸出:14

print(format(12, 'x')) # 转化成十六进制小写字母表明,輸出:c

print(format(12, 'X')) # 转化成十六进制英文大写字母表明,輸出:C

应用二:形成数据信息序号

运用 format() 涵数完成数据信息序号。对数据信息开展序号,也是对字符串数组恢复出厂设置实际操作的一种方法,应用 format() 涵数能够对字符串数组开展恢复出厂设置序号。只需设定添充标识符(序号一般 设定 0),设定两端对齐方法时能够应用 和 ^ 标记表明左对齐、右两端对齐和垂直居中两端对齐,两端对齐添充的标记在 总宽 范畴内輸出时添充就可以。对数据 1 开展 3 位序号,右两端对齐,必须设定 format() 涵数的添充标识符为 0,两端对齐方法为右两端对齐,总宽为 3。实际编码为:

print(format(1, '0>3')) # 輸出:001

print(format(1, '>03')) # 輸出:001

print(format(15, '0>5')) # 輸出:00015

要形成的序号一般 非常复杂,如依据当日的日期创建序号,或是大批量形成序号,或是将给出的大批量数据信息中的数字转换成十位数固定不动的序号,下边得出完成序号的编码:

import datetime

# 時间+序号

wx = datetime.datetime.now().date()

now = datetime.datetime.now()

print(str(wx), format(1, '0>3')) # 年-月-日 +3位序号,輸出:2021-01-17 001

print(format(now, '%Y-%m-%d'), format(1, '0>3')) # 年-月-日 +3位序号,輸出:2021-01-17 001

print(format(now, '%Y%m%d'), 'NO' + format(1, '0>3')) # 年-月-日+NO+3位序号,輸出:20210117 NO001

print(format(now, '%d'), 'NO' + format(1, '0>3')) # 日期 +NO+3位序号,輸出:17 NO001

print(format(now, '%H%M'), 'NO' + format(1, '0>3')) # 时-+分 +NO+3位序号,輸出:1411 NO001

大批量形成序号:

# 大批量形成序号

for i in range(1, 6):

print(format(i, '0>2'))

程序执行結果以下:

3e96910fe08264d1446ae749bd82e48b.png

# 恢复出厂设置目录序号

# 对现有非序号数据开展恢复出厂设置序号

nba = {1: '伦纳德', 2: '杜兰特', 3: '乔冶'}

for key, value in nba.items():

print(format(key, '0>3'), value)

程序执行結果以下:

b80c8ac4de443f0da7ce3147bdeb329d.png

要完成嵌入序号,如A001-A005、B001-B005、C001-005 的嵌入序号,编码以下:

for i in range(65, 69):

for j in range(1, 6):

data = chr(i) + format(j, '0>3') + ' '

print(data, end='')

print()

程序执行結果以下:

a2dee0966e18bf953f72b9289556f575.png

应用三:恢复出厂设置十进制整数金额

针对不一样的种类数据信息,format() 涵数的主要参数 format_spec 出示的值都不一样,针对十进制整数金额,整形标值能够出示的主要参数有d、n。实际以下:

print(format(81, '8d')) # 8位整数金额表明,不够一部分整数金额前要空格符添充

print(format(81, '+d')) # 恢复出厂设置为带符号整数金额表明数据信息

print(format(-81, '8d')) # 恢复出厂设置为8位带符号整数金额表明,补位空格符放进标记前

print(format(81, '=8d')) # 恢复出厂设置为8位正整数,用空格符补位

print(format(-81, '=8d')) # 恢复出厂设置为8位负整数,不够一部分在负号后添充

print(format(81, '+8d')) # 恢复出厂设置为8位正整数,不够一部分在标记前添充

print(format(-81, '8d')) # 恢复出厂设置为8位负整数,不够一部分在标记前添充

print(format(81, '>10')) # 右两端对齐,总宽为10个标识符

print(format(81, '<10')) # 左两端对齐,总宽为10个标识符

print(format(81, '010')) # 用0添充空格符,总宽为10个标识符

print(format(81, '@<10')) # 用“@”添充空格符,总宽为10个标识符

print(format(81, '@>10')) # 用“@”添充空格符,总宽为10个标识符

print(format(+81, '=10')) # 右两端对齐,总宽为10个标识符

print(format(81, '0^10')) # 用0添充空格符,总宽为10个标识符

s = 125

print(format(s, '0>10')) # 右两端对齐,不够特定总宽一部分用0添充

print(format(s, '>04')) # 右两端对齐,不够特定总宽一部分用0添充

print(format(s, '*>10')) # 右两端对齐,不够特定总宽一部分用“*”添充

print(format(s, '>010')) # 右两端对齐,特定0标志位添充

print(format(s, '>10')) # 右两端对齐,没特定添充值,用初始值空格符添充

print(format(s, '+^30')) # 垂直居中两端对齐,用“+”添充不够一部分

print(format(s, '*<8')) # 右两端对齐,不够特定总宽一部分用“*”添充

print(format(s, '08')) # 右两端对齐,特定0标志位添充

应用四:恢复出厂设置浮点数

针对浮点数种类,能够出示的主要参数有e、E、f、F、g、G、n、%、None 等。

用 f 表明浮点种类,能够在其前面再加上精密度操纵,用以操纵輸出总宽。假如輸出十位数超过总宽,就按具体十位数輸出。还能够为浮点数特定标记,+表明在正数前表明正号+。- 表明在负值前表明负号 - (- 与全都不用({:f})时一致)。空格符表明在正数前面空格符,在负值前面 -,.3f 表明浮点数的精密度为 3(小数位保存3位)。

print(format(628, '.1f')) # 恢复出厂设置为保存1位小数的浮点数,輸出:628.0

print(format(628, '.2f')) # 恢复出厂设置为保存2位小数的浮点数,輸出:628.00

print(format(3.14159, '.1f')) # 恢复出厂设置为保存1位小数的浮点数,輸出:3.1

print(format(3.14159, '.2f')) # 恢复出厂设置为保存2位小数的浮点数,輸出:3.14

print(format(3.14159, '.5f')) # 恢复出厂设置为保存5位小数的浮点数,輸出:3.14159

print(format(-3.14159, '.3f')) # 恢复出厂设置为保存3位小数的浮点数,輸出:-3.142

print(format(3.1415926535898, 'f')) # 默认设置精密度保存6位小数,輸出:3.141593

# 默认设置精密度保存6位小数,不够一部分用空格符添充,輸出:3.141590

print(format(3.14159, 'f'))

print(format(3.14159, '+.3f')) # 恢复出厂设置为保存3位小数带符号的浮点数

print(format(3.14159, '>8.2f')) # 右两端对齐,保存2位小数

print(format(3.14159, '<10.2f')) # 左两端对齐,总宽为10,保存2位小数,不够一部分用空格符添充

print(format(3.14159, '10.3f')) # 右两端对齐,用“@”添充不够部位

print(format(-3.14159, '=10.2f')) # 恢复出厂设置为保存2位小数的10十位数,默认设置用空格符添充

print(format(-3.14159, '0=10.2f')) # 恢复出厂设置为保存2位小数的10十位数,空格符用0添充

print(format(3.14159, '0^10.2f')) # 保存2位小数的10十位数,垂直居中表明,空格符用0添充

应用五:恢复出厂设置百分比

在恢复出厂设置表述中独立或是在精密度以后加上 % 号,能够完成用百分比表明浮点数,如:

print(format(0.161896, '%')) # 将小数恢复出厂设置成百分比,輸出:16.189600%

print(format(0.161896, '.2%')) # 恢复出厂设置为保存2位小数的百分比,輸出:16.19%

print(format(0.0238912, '.6%')) # 恢复出厂设置为保存6位小数的百分比,輸出:2.389120%

print(format(2 / 16, '.2%')) # 恢复出厂设置为保存2位小数的百分比,輸出:12.50%

print(format(3.1415926, '.1%')) # 恢复出厂设置为保存1位小数的百分比,輸出:314.2%

print(format(0.161896, '.0%')) # 恢复出厂设置为保留整数的百分比,輸出:16%

print(format(0.0238912, '8.6%')) # 恢复出厂设置为保存6位小数的八位百分比,輸出:2.389120%

print(format(0.0238912, '>8.3%')) # 恢复出厂设置为保存3位小数的八位百分比,輸出:2.389%

应用六:恢复出厂设置科学记数法

假如要将浮点数选用科学记数法表明,能够在恢复出厂设置模版中应用 e 和 E 或是 g 和 G。e 为通用性的幂标记,用科学记数法复印数据,用 e 表明幂。应用 g 时,将标值以 fixed-point 文件格式輸出。当标值尤其大的情况下,用幂方式輸出。

#####e和E

print(format(3141592653589, 'e')) # 科学记数法,默认设置保存6位小数,輸出:3.141593e+12

print(format(3.14, 'e')) # 科学记数法,默认设置保存6位小数,輸出:3.140000e+00

print(format(3.14, '0.4e')) # 科学记数法,默认设置保存4位小数,輸出:3.1400e+00

print(format(3141592653589, '0.2e')) # 科学记数法,保存2位小数,輸出:3.14e+12

print(format(3141592653589, '0.2E')) # 科学记数法,保存2位小数,选用英文大写E表明,輸出:3.14E+12

#####g和G

print(format(3.14e+1000000, 'F')) # 无穷转化成英文大写字母,輸出:INF

print(format(3141592653589, 'g')) # 科学记数法,保存2位小数,輸出:3.14159e+12

print(format(314, 'g')) # 科学记数法,保存2位小数,輸出:314

print(format(3141592653589, '0.3g')) # 科学记数法,保存2位有效数字,选用小写字母e表明,輸出:3.1e+12

print(format(3141592653589, 'G')) # 科学记数法,保存5位小数,选用英文大写E表明,輸出:3.14159E+12

print(format(3.14e+1000000, 'g')) # 小数位计数法,无穷转化成小写字母,輸出:inf

应用七:恢复出厂设置额度

format() 涵数还能用于作额度的千位分隔符。假如要完成额度前边携带有关贷币的标记方式的作用,必须在该涵数前边手动式再加上相对货币符号。如:

print('$' + format(1201398.2315, '.2f')) # 加上美元符号,小数保存2位

print(chr(36) + format(1201398.2315, '.2f')) # ASCII码加上美元符号,小数保存2位

print('¥' + format(78088888, ',')) # 加上人民币符号,用千位分隔符区别额度

print('£' + format(7908.2315, '.2f')) # 加上英镑符号,用千位分隔符开展区别

print('€' + format(7908.2315, ',.2f')) # 加上欧元符号,保存两位小数,百位数隔开

print(chr(0x20ac) + format(1201398.2315, ',f')) # 应用十六进制编号加上欧元符号

程序执行結果以下:

0f288dc5bf31a990baad1b26d2df8169.png

应用八:恢复出厂设置标识符

恢复出厂设置标识符关键包含截取字符串,字符串数组两端对齐方法表明,添充字符串数组等,编码以下:

print(format('PYTHON', 'M^20.3')) # 提取3个标识符,总宽为20垂直居中,不够用M添充

print(format("PYTHON", '10')) # 默认设置居左表明,不够一部分用空格符添充

print(format('blog.csdn.net', '.3')) # 提取3个标识符,默认设置居左表明

print(format("PYTHON", '>10')) # 居右表明,不够一部分用空格符添充

s = 'blog.csdn.net'

print(format(s, '0>20')) # 右两端对齐,不够特定总宽一部分用0添充

print(format(s, '>4')) # 右两端对齐,因标识符具体总宽超过特定总宽4,无需添充

print(format(s, '*>20')) # 右两端对齐,不够特定总宽一部分用*添充

print(format(s, '>020')) # 右两端对齐,特定0标志位添充

print(format(s, '>20')) # 右两端对齐,没特定添充值,用初始值空格符添充

print(format(s, '+^30')) # 垂直居中两端对齐,用+添充不够一部分

程序执行結果以下:

eed200b359996eb67ae72480bef34ff7.png

应用九:进制转换

进制转换主要是开展十进制、十六进制、八进制、二进制的变换,如果是十六进制、八进制、二进制数,变换前最好是保存进制作为前缀,如 Ox/0o/0b,那样能够确保变换的精确性。关键进制转换标记表明以下:

b:二进制。将数据以 2 为数量开展輸出。

d:十进制整数金额。将数据以 10 为数量开展輸出。

o:八进制。将数据以 8 为数量开展輸出。

x:十六进制。将数据 以16 为数量开展輸出,9 之上的数据用小写字母。

十进制、十六进制、八进制、二进制的变换编码以下:

print(format(77)) # 文件格式主要参数为空,默认设置为十进制

print(format(77, 'd')) # 原来是十进制数,变换后为固定资产原值

print(format(-77, 'd')) # 原来是十进制数,变换后为固定资产原值

print(format(77, '8d')) # 变换为8位十进制数,空闲一部分用空格符添充

print(format(-77, '8d')) # 变换为8位十进制数,负值在负号前添充空闲一部分空格符

print(format(77, '+8d')) # 变换为8位带符号十进制数,在标记前添充空闲一部分空格符

print(format(-77, '08d')) # 变换为8位十进制数,负值在负号前添充空闲一部分空格符

print(format(77, '+08d')) # 变换为8位带符号十进制数,在标记前添充空闲一部分空格符

print(format(-77, '#8d')) # 变换为8位十进制数,增加制标示

print(format(-77, '=8d')) # 变换为8位十进制数,空闲一部分添充空格符

print(format(+77, '=8d')) # 变换为8位十进制数,空闲一部分添充空格符

print(format(+77, '*=8d')) # 变换为8位十进制数,空闲一部分添充*

print(format(+77, '*=+8d')) # 变换为8位带符号十进制数,标记与数据信息中间添充*

print(format(-77, '#=8d')) # 变换为8位十进制数,在标记与空闲一部分添充#

print(format(+77, '*<8d')) # 变换为8位十进制数,左两端对齐,空闲一部分添充*

print(format(-77, '#>8d')) # 变换为8位十进制数,右两端对齐,空闲一部分添充#

print(format(0X5A, 'd')) # 十六进制数5A转化成十进制数,0X意味着十六进制数

print(format(0B011101, '+8d')) # 二进制数011101转化成十进制数,0B意味着二进制数

print(format(0O34, 'd')) # 八进制数34转化成十进制数,0O意味着八进制数

print(format(0O123456, '08d')) # 十六制数123456转化成十进制数,不够用0添充

print(format(+0X1234, '*>8d')) # 十六进制数1234转化成十进制数,右两端对齐,不够用*

针对含有进制作为前缀的数,如 0x、0o、0b,能够立即在后面再加上 x、o、b 开展删掉。

print(format(0X5A, 'x')) # 除去十六进制数的作为前缀,輸出:5a

print(format(0B011101, 'b')) # 除去二进制数的作为前缀,輸出:11101

print(format(0O34, 'o')) # 除去八进制数的作为前缀,輸出:34

应用十:恢复出厂设置日期和時间

format() 涵数还可以对日期和時间开展恢复出厂设置,恢复出厂设置时能够根据日期和时间格式标记开展设定,Python 中常见的時间日期恢复出厂设置标记如表 1.1 所显示。

7beef966f8831fadca35a3a9197f0f41.png

常见实际操作编码以下:

import datetime

now = datetime.datetime.now()

print(format(now, '%Y-%m-%d %H:%M:%S %A')) # 当今时间格式化为年-月-日+详细英文星期

print(format(now, '%Y-%m-%d %H:%M:%S %a')) # 当今时间格式化为年-月-日+缩写英文星期

# 汉语年-月-日表明

print(format(now, '%Y'), '年', format(now, '%m'), '月', format(now, '%d'), '日')

# 汉语时间显示

print(format(now, '%H'), '年', format(now, '%M'), '分', format(now, '%S'), '秒')

print(format(now, '%Y-%m-%d %H:%M:%S %a')) # 当今时间格式化为年-月-日+缩写英文星期

print(format(now, '%Y-%m-%d')) # 当今时间格式化为规范年-月-日

print(format(now, '%y-%m-%d')) # 当今时间格式化为短日期年-月-日

print(format(now, '%Y%d')) # 当今时间格式化为长日期年-月-日,间隔符为“”

print(format(now, '%c')) # 当地相匹配的年-月-日礼拜表明

print(format(now, '%B')) # 当地详细的月份表明,輸出:May

print('现在是2020年第', format(now, '%j'), '天') # 今天一年中什么时间,輸出:现在是2020年第 017 天

print('这周是2020年第', format(now, '%U'), '周') # 这周是一年中第几周,輸出:这周是2020年第 02 周

print(format(now, '%y%m%d')) # 无间隔符短日期文件格式年月日,輸出:210117

print(format(now, '%Y-%m')) # 长日期文件格式年-月,輸出:2021-01

print(format(now, '%m-%d')) # 月-日表明,輸出:01-17

print(format(now, '%m')) # 月份独立表明,輸出:01

print(format(now, '%d')) # 日期独立表明,輸出:17

print(format(now, '%H%M%S')) # 无间隔符,輸出:133536

print(format(now, '%H:%M:%S')) # 规范时-分-秒,輸出:13:35:36

print(format(now, '%I:%M:%S %I')) # 12小时制时-分-秒,輸出:01:35:36 01

print(format(now, '%H:%M')) # 时+分,輸出:13:35

print(format(now, '%M%S')) # 分+秒,輸出:3536

print(format(now, '%H')) # 只表明钟头,輸出:13

print(format(now, '%H:%M:%S %p')) # 日期表明按AM,PM表明,輸出:13:35:36 PM

print(format(now, '%a')) # 英语星期简写,輸出:Sun

print(format(now, '%A')) # 英文星期详细表明,輸出:Sunday

week = ['礼拜日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']

print(week[int(format(now, '%w'))]) # 汉语礼拜,輸出:礼拜日

dt = datetime.datetime(2020, 5, 9)

dm = datetime.datetime(2020, 5, 9, 12, 50, 20)

# 将键入的日期按年-月-日和时间格式化,因時间沒有键入,按0时解决

print(format(dt, '%Y-%m-%d %H:%M:%S'))

print(format(dt, '%Y-%m-%d')) # 将键入的日期按年-月-日恢复出厂设置

print(format(dm, '%Y-%m-%d %H:%M:%S')) # 将键入的日期按年-月-日和时间格式化

print(format(dm, '%Y-%m-%d')) # 将键入的日期按年-月-日恢复出厂设置

wx = datetime.datetime.now()

print(str(wx), format(1, '0>3')) # 年-月-日 +3位序号

print(format(now, '%Y-%m-%d'), format(1, '0>3')) # 年-月-日 +3位序号

print(format(now, '%Y%m%d'), 'NO' + format(1, '0>3')) # 年-月-日 +NO+3位序号

print(format(now, '%d'), 'NO' + format(1, '0>3')) # 日期 +NO+3位序号

print(format(now, '%H%M'), 'NO' + format(1, '0>3')) # 数字时钟+分 +NO+3位序号

四、应用 f-string 方式

f-string 是 Python3.6 增加的一种字符串数组文件格式方式,因为前边早已详细介绍了多种多样恢复出厂设置方法,如出一辙,这里用简易的实例对其使用方法开展演试。

【实例1】应用 f-string 方式在字符串数组中置入自变量和关系式

name = "Python" # 字符串数组

ver = 3.6 # 浮点数

# 輸出:Python-3.6、Python-3.7、Python-3.8000000000000003

print(f"{name}-{ver}、{name}-{ver + 0.1}、{name}-{ver + 0.2}")

【实例2】在实例 1 中,关系式测算浮点数时产生外溢,能够应用独特恢复出厂设置修饰符限制只表明 1 位小数。

name = "Python" # 字符串数组

ver = 3.6 # 浮点数

# 輸出:Python-3.6、Python-3.7、Python-3.8

print(f"{name}-{ver}、{name}-{ver + 0.1}、{name}-{ver + 0.2:.1f}")

【实例3】把十六进制数据 10 各自变换为用十进制、十六进制、八进制和二进制表明。

n = 0x10 # 十六进制数字10

# 輸出:dec:16, hex:10, oct:16, bin:10000

print(f"dec:{n:d}, hex:{n:x}, oct:{n:0}, bin:{n:b}")

【实例4】假如要在几行中表明字符串数组,能够应用下边实例方法,在每一行子串前边都再加上 f 修饰符。

name = "Python" # 字符串数组

ver = 3.6 # 浮点数

s = f"{name}-" \

f"{ver}"

print(s) # 輸出:Python-3.6

到此今日的实例就告一段落了,小编在这儿申明,小编发表文章仅仅为了更好地交流学习,及其让大量学习培训 Python 基本的阅读者少走一些弯道,省时省力,并无需做别的主要用途,若有侵权行为,联络时尚博主删掉就可以。感谢你们阅读文章这篇博闻,期待文中能变成您程序编写道上的开拓者。祝你阅读文章开心!

3536d18dc3f71dc25c652c4334c49127.gif

好书推荐不腻读百回,通读课思子知道。而我要变成整场最靓的仔,就应该始终坚持通过学习来获得大量专业知识,用专业知识改变人生,用blog让青春飞扬,用行動证实我还在勤奋。

假如我的网站对给你协助、假如你喜爱我的网站內容,请 关注点赞、评价、个人收藏 一键三连哦!听闻关注点赞的人运势不容易很差,每一天都是会满血复活呦!假如确实要白给得话,那祝你开心每一天,热烈欢迎常到我blog看一下。

编号不容易,大伙儿的适用是我坚持到底的驱动力。关注点赞后不必忘记了 关心 我哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python的pickle模块是用来实现序列化的,即将Python中的对象转换成字节流,方便存储和传输。pickle模块支持多种协议,其中协议0是最早的版本,协议1和协议2是Pyhton2中引入的,协议3是Python3.0中引入的,协议4是Python3.4中引入的,每个协议都有其特点和适用范围。 下面我们来详细了解一下pickle模块的使用方法和各个协议的特点。 ## 基本用法 pickle模块提供了dumps、dump、loads和load四个函数,分别用来进行序列化和反序列化操作。其中dumps和loads函数可以直接将对象转换成字节流或将字节流转换成对象,而dump和load函数则可以将对象序列化到文件或从文件中反序列化对象。 ### 序列化 将Python对象转换成字节流的过程称为序列化,可以使用dumps函数实现: ```python import pickle data = {'name': 'Tom', 'age': 18, 'gender': 'male'} bytes_data = pickle.dumps(data) print(bytes_data) ``` 输出结果为: ``` b'\x80\x04\x95\x17\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x03Tom\x94\x8c\x03age\x94K\x12\x8c\x06gender\x94\x8c\x04male\x94u.' ``` 可以看到,data字典被转换成了一串二进制的字节流。 ### 反序列化 将字节流转换成Python对象的过程称为反序列化,可以使用loads函数实现: ```python import pickle bytes_data = b'\x80\x04\x95\x17\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x03Tom\x94\x8c\x03age\x94K\x12\x8c\x06gender\x94\x8c\x04male\x94u.' data = pickle.loads(bytes_data) print(data) ``` 输出结果为: ``` {'name': 'Tom', 'age': 18, 'gender': 'male'} ``` ### 文件操作 除了使用dumps和loads函数进行序列化和反序列化操作外,pickle模块还提供了dump和load函数用于将对象序列化到文件或从文件中反序列化对象。 将对象序列化到文件: ```python import pickle data = {'name': 'Tom', 'age': 18, 'gender': 'male'} with open('data.pkl', 'wb') as f: pickle.dump(data, f) ``` 从文件中反序列化对象: ```python import pickle with open('data.pkl', 'rb') as f: data = pickle.load(f) print(data) ``` ## 协议0 协议0是最早的版本,它使用ASCII码来表示序列化后的对象,因此序列化后的数据比较大。使用协议0时,可以指定文件打开模式为't',表示以文本模式打开文件: ```python import pickle data = {'name': 'Tom', 'age': 18, 'gender': 'male'} with open('data.pkl', 'wt') as f: pickle.dump(data, f, protocol=0) with open('data.pkl', 'rt') as f: data = pickle.load(f) print(data) ``` 输出结果为: ``` {'age': 18, 'gender': 'male', 'name': 'Tom'} ``` ## 协议1 协议1和协议2是Python2中引入的,它们使用更紧凑的二进制格式表示序列化后的对象。协议1可以指定文件打开模式为'wb',表示以二进制模式打开文件: ```python import pickle data = {'name': 'Tom', 'age': 18, 'gender': 'male'} with open('data.pkl', 'wb') as f: pickle.dump(data, f, protocol=1) with open('data.pkl', 'rb') as f: data = pickle.load(f) print(data) ``` 输出结果为: ``` {'name': 'Tom', 'age': 18, 'gender': 'male'} ``` ## 协议2 协议2是协议1的改进版本,它支持新的对象类型,如集合、字典等。在Python2中,协议2是默认使用的协议,如果不指定协议号,则使用协议2。 在Python3中,pickle模块默认使用协议3,但仍然可以使用协议2: ```python import pickle data = {'name': 'Tom', 'age': 18, 'gender': 'male'} with open('data.pkl', 'wb') as f: pickle.dump(data, f, protocol=2) with open('data.pkl', 'rb') as f: data = pickle.load(f) print(data) ``` 输出结果为: ``` {'name': 'Tom', 'age': 18, 'gender': 'male'} ``` ## 协议3 协议3是Python3.0中引入的,它支持更多的对象类型,如bytes、bytearray、set等。在Python3中,协议3是默认使用的协议,因此可以省略protocol参数: ```python import pickle data = {'name': 'Tom', 'age': 18, 'gender': 'male'} with open('data.pkl', 'wb') as f: pickle.dump(data, f) with open('data.pkl', 'rb') as f: data = pickle.load(f) print(data) ``` 输出结果为: ``` {'name': 'Tom', 'age': 18, 'gender': 'male'} ``` ## 协议4 协议4是Python3.4中引入的,它支持更多的对象类型,如memoryview、tuple等。协议4还支持从流中读取指定长度的数据,从而避免了一次性读取太多数据导致内存溢出的问题。 使用协议4时,需要将文件打开模式指定为'xb',表示以二进制模式打开文件,并且不能使用文本模式: ```python import pickle data = {'name': 'Tom', 'age': 18, 'gender': 'male'} with open('data.pkl', 'xb') as f: pickle.dump(data, f, protocol=4) with open('data.pkl', 'rb') as f: data = pickle.load(f) print(data) ``` 输出结果为: ``` {'name': 'Tom', 'age': 18, 'gender': 'male'} ``` ## 注意事项 在使用pickle模块时,需要注意以下几点: - 序列化和反序列化的对象必须是可序列化的,即不能包含不能序列化的对象。 - 序列化和反序列化的对象必须是相同的类型,否则可能会出现错误。 - 序列化和反序列化的对象必须是可信的,否则可能会被注入恶意代码。 - 不同协议之间的兼容性不同,不同协议之间的序列化和反序列化操作不一定是互逆的。因此,在使用不同协议时,需要注意协议号的兼容性和相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值