本文用以总结如何使用python得到各种数据的标准化输出。
Updated: 2022 / 12 / 20
Python | 标准化输出
时间与日期
日期
参考这里 4
日期 | 方法 | 说明 |
---|---|---|
今天 | datetime.date.today() | 输出结果类似于 2022-12-21 |
datetime.date.today().strftime('%y-%m-%d') | 输出效果类似于 22-12-21 | |
今天 ± 指定时长(单位为秒/小时/天数/周数等) | datetime.date.today + datetime.timedelta(weeks=2) | 输出效果类似于 2023-01-05 |
时间
字符串
可以使用split
函数对字符串进行拆分,或者format
来进行输出形式规整。
Python中的split()函数的使用方法
Python字符串格式化–format()方法
拆分
系统路径
常见字符串
dataframe中的批量拆分
格式规整
format
语法
Python 2.6
开始,新增了一种格式化字符串的函数 str.format()
,它增强了字符串格式化的功能。
基本语法是通过 {}
和 :
来代替以前的 %
。
基本使用格式是:
<模板字符串>.format(<逗号分隔的参数>)
会返回一个新的字符串,参数从 0
开始编号,可以非常方便地连接不同类型的变量或内容。
format
函数可以接受不限个参数,位置可以不按顺序。也可以设置参数。也可以向 str.format()
传入对象。
format()
方法中 <模板字符串>
的槽除了包括参数序号,还可以包括格式控制信息。此时,槽的内部样式如下:
{<参数序号>: <格式控制标记>}
其中,<格式控制标记>用来控制参数显示时的格式,包括:<填充>
<对齐>
<宽度>
<.精度>
<类型>
6 个字段,这些字段都是可选的,可以组合使用,逐一介绍如下。
参数 | 描述 |
---|---|
填充 | 指<宽度>内除了参数外的字符采用什么方式表示,默认采用空格,可以通过<填充>更换。 |
对齐 | 指参数在<宽度>内输出时的对齐方式,分别使用<、>和^三个符号表示左对齐、右对齐和居中对齐。 |
宽度 | 指当前槽的设定输出字符宽度,如果该槽对应的format()参数长度比<宽度>设定值大,则使用参数实际长度。如果该值的实际位数小于指定宽度,则位数将被默认以空格字符补充。 |
逗号 (,) | <格式控制标记>中逗号(, )用于显示数字的千位分隔符 |
精度 | 表示两个含义,由小数点(. )开头。对于浮点数,精度表示小数部分输出的有效位数。对于字符串,精度表示输出的最大长度。 |
类型 | 表示输出整数和浮点数类型的格式规则。 对于整数类型,输出格式包括 6 种: b : 输出整数的二进制方式;c : 输出整数对应的 Unicode 字符;d : 输出整数的十进制方式;o : 输出整数的八进制方式;x : 输出整数的小写十六进制方式;X : 输出整数的大写十六进制方式;对于浮点数类型,输出格式包括 4 种: e : 输出浮点数对应的小写字母 e 的指数形式;E : 输出浮点数对应的大写字母 E 的指数形式;f : 输出浮点数的标准浮点形式;% : 输出浮点数的百分形式。浮点数输出时尽量使用<.精度>表示小数部分的宽度,有助于更好控制输出格式。 |
示例
format
函数可以接受不限个参数,位置可以不按顺序;
print("{} {}".format("hello", "world")) # 不设置指定位置,按默认顺序
# 'hello world'
print("{0} {1}".format("hello", "world")) # 设置指定位置
# 'hello world'
print("{1} {0} {1}".format("hello", "world")) # 设置指定位置
# 'world hello world'
- 可以通过字典、列表索引、元组索引设置参数;
print("姓名:{name};性别:{sex}".format(name="Alice", sex="female"))
# 姓名:Alice, 性别:female
dt = {"name": "Alice", "sex": "female"}
print("姓名:{name};性别:{sex}".format(**dt))
# 姓名:Alice;性别:female
lst = ['Alice', 'female']
print("姓名:{0};性别:{1}".format(*lst)) # "0" 是必须的
# 姓名:Alice, 性别:female
tpl = ('Alice', 'female')
print("姓名:{0};性别:{1}".format(*tpl))
# 姓名:Alice;性别:female
- 可以向
str.format()
传入对象;
class AssignValue(object):
def __init__(self, value):
self.value = value
my_value = AssignValue(6)
print('value 为: {0.value}'.format(my_value)) # "0" 是可选的
# value 为: 6
- 指定格式
s = "PYTHON"
"{0:30}".format(s)
Out[17]: 'PYTHON '
"{0:>30}".format(s)
Out[18]: ' PYTHON'
"{0:*^30}".format(s)
Out[19]: '************PYTHON************'
"{0:-^30}".format(s)
Out[20]: '------------PYTHON------------'
"{0:3}".format(s)
Out[21]: 'PYTHON'
"{0:.4}".format("PYTHON")
Out[22]: 'PYTH'
%
语法
%
操作符,格式如下:
%[(name)][flags][width].[precision]typecode
参数 | 含义 |
---|---|
(name) | 命名 |
flags | 可以有 + ,- ,' '或 0 。+ 表示右对齐。- 表示左对齐。' ' 为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0 表示使用 0 填充。 |
width | 表示显示宽度 |
precision | 表示小数点后精度 |
typecode | 以下是类型码:%s ,字符串 (采用 str() 的显示)%r ,字符串 (采用 repr() 的显示)%c ,单个字符%b ,二进制整数%d ,十进制整数%i ,十进制整数%o ,八进制整数%x ,十六进制整数%e ,指数 (基底写为 e )%E ,指数 (基底写为 E )%f ,浮点数%F ,浮点数,与上相同%g ,指数( e )或浮点数 (根据显示长度)%G ,指数(E )或浮点数 (根据显示长度)%% , 字符 "%" |
示例
- 第一个
%
后面的内容为显示的格式说明,6
为显示宽度,3
为小数点位数,f
为浮点数类型;
第二个%
后面为显示的内容来源,输出结果右对齐,2.300
长度为5
,故前面有一空格,总长度为6
。
print("%6.3f" % 2.3)
2.300
x
为表示16
进制,显示宽度为10
,前面有8
个空格,十进制10
等同于 十六进制0xa
。
print("%+10x" % 10)
+a
%-5x
负号为左对齐,显示宽度为5
,故-a
后面有3
个空格,十进制10
等同于 十六进制0xa
。
print("%-5x" % -10)
-a
width
,precision
为两个整数。我们可以利用*
来动态代入这两个量。比如:
print("%10.*f" % (4, 1.2))
1.2000
数字
格式规整
format
语法
数字 | 格式 | 输出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} | 3.14 | 保留小数点后两位 |
3.1415926 | {:+.2f} | +3.14 | 带符号保留小数点后两位 |
-1 | {:-.2f} | -1.00 | 带符号保留小数点后两位 |
2.71828 | {:.0f} | 3 | 不带小数 |
5 | {:0>2d} | 05 | 数字补零 (填充左边, 宽度为 2 ) |
5 | {:x<4d} | 5xxx | 数字补 x (填充右边, 宽度为 4 ) |
10 | {:x<4d} | 10xx | 数字补 x (填充右边, 宽度为 4 ) |
1000000 | {:,} | 1,000,000 | 以逗号分隔的数字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00e+09 | 指数记法 |
13 | {:>10d} | 13 | 右对齐 (默认, 宽度为 10 ) |
13 | {:<10d} | 13 | 左对齐 (宽度为 10 ) |
13 | {:^10d} | 13 | 中间对齐 (宽度为 10 ) |
11 | '{:b}'.format(11) '{:d}'.format(11) '{:o}'.format(11) '{:x}'.format(11) '{:#x}'.format(11) '{:#X}'.format(11) | 1011 11 13 b 0xb 0XB 进制 | 进制 |
^
, <
, >
分别是居中、左对齐、右对齐,后面带宽度;
:
号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充;
+
表示在正数前显示 +
,-
负数前显示 -
;
(空格)表示在正数前加空格。
b
、d
、o
、x
分别是二进制、十进制、八进制、十六进制。
示例
"{0:-^20,}".format(1234567890)
Out[24]: '---1,234,567,890----'
"{0:-^20}".format(1234567890) #对比输出
Out[25]: '-----1234567890-----'
"{0:.2f}".format(12345.67890)
Out[29]: '12345.68'
"{0:H^20.3f}".format(12345.67890)
Out[30]: 'HHHHH12345.679HHHHHH'
"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
Out[32]: '110101001,Ʃ,425,651,1a9,1A9'
"{0:e},{0:E},{0:f},{0:%}".format(3.14)
Out[33]: '3.140000e+00,3.140000E+00,3.140000,314.000000%'
"{0:.2e},{0:.2E},{0:.2f},{0:.2%}".format(3.14)
Out[34]: '3.14e+00,3.14E+00,3.14,314.00%
小数位数
参考这里 7
方法
round
Decimal
示例
round
a = 12.345
round_a = round(a, 2)
# 12.35
Decimal
from decimal import Decimal
a = 12.345
decimal_a = Decimal(a).quantize(Decimal("0.00"))
# 12.35