字符串之format整理
format 用法
本文根据官方文档及自己理解整理,只整理出自己可以理解的部分,h因个人水平有限,难免有所错误和纰漏,欢迎批评指正。
格式{ [field_name] ["!" conversion] [":" format_spec] }
"{" [field_name] ["!" conversion] [":" format_spec] "}"
大括号的内容大概分为两部分,冒号":"前的部分和后面的部分。里面的参数全部都可以省略。
冒号前部分主要为数据引用和转化部分
冒号后面为指定详细的显示格式(format specification)
冒号前部分
冒号前的部分,分两块,一块为field_name,另一块为使用叹号"!"开头conversion(指定函数转化)
field_name
field_name可以有以下几种方式:
常规:
1.指定索引
2.省略,什么也不写,默认为其在字符串中的位置索引,从0开始。
3.标识符
复杂:
- 指定索引或标识符的前提下,使用其attribute_name(属性名) 比如point.x;0.name等方式
- 指定索引或标识符的前提下,使用其element_index(索引),比如lst[2];0[0]等
>>> "Hello,My name is {},I'm {}.".format('Wesley','12')
"Hello,My name is Wesley,I'm 12."
>>> "Hello,My name is {0},I'm {1}.".format('Wesley','12')
"Hello,My name is Wesley,I'm 12."
>>> "Hello,My name is {name},I'm {age}.".format(age='12',name='Wesley')
"Hello,My name is Wesley,I'm 12."
比较复杂一些
>>> "Hello,My name is {0[0]},I'm {0[1]}.".format(youth)
"Hello,My name is Wesley,I'm 12."
>>> "Hello,My name is {boy[0]},I'm {boy[1]}.".format(boy=youth)
"Hello,My name is Wesley,I'm 12."
>>> from collections import namedtuple
>>> Person=namedtuple("Persion",['name','age'])
>>> boy = Person('Wesley',12)
>>> "Hello,My name is {0.name},I'm {0.age}.".format(boy)
"Hello,My name is Wesley,I'm 12."
>>> "Hello,My name is {boy.name},I'm {boy.age}.".format(boy=boy)
"Hello,My name is Wesley,I'm 12.
conversion部分
conversion部分:
- !s 调用函数str()
- !r 调用函数repr()
- !a 调用函数ascii()
对传进来的数值使用format函数之前,首先使用指定的函数对其进行强制类型转换为str类型。str(),repr()和ascii()三个函数转换为字符串的方式有所不同。若省略,则由__format__函数自动处理。
冒号后部分
format_spec语法
format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill ::= <any character>
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= digit+
grouping_option ::= "_" | ","
precision ::= digit+
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
format_spec对于不同类型的数值,其支持的参数不同。
字符串
format specification中,很多方法只支持数字,相对来说,对数值做字符串处理,主要支持以下:
- 宽度,width : 用数字标识
- 对齐 align: 对字符串分别用'<' '^' '>' 标识 左对齐 居中 右对齐
- 填充 fill : 用指定字符填充空白位,默认为空格
对齐填充和宽度
字符串,默认左对齐,默认填充为空格;
都可以省略,可以指定对齐方式,填充省略,默认为空格。
若要修改填充,必须指定对齐方式
对齐分三种,左对齐('<'),右对齐('>'),居中('^')
>>> '{:}'.format("hello")
'hello'
指定宽度为10个字符,默认为左对齐
>>> '{:10}'.format("hello")
'hello '
指定宽度为10个字符,右对齐
>>> '{:>10}'.format("hello")
' hello'
指定宽度为10个字符,居中对齐,空白字符用“*”填充
>>> '{:*^10}'.format("hello")
'**hello***'
若填充为0,还可以在宽度前加一个数字0,字符串格式同样遵循指定对齐方式
指定宽度为10个字符,居中对齐,空白字符用“0”填充。
>>> '{:^010}'.format("hello")
'00hello000'
字符串各种不怎么用前导0做填充,这个主要给数字格式用的,其默认的对齐方式为‘=’,只能在数字格式中使用的对齐方式)
>>> '{:010}'.format("hello")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: '=' alignment not allowed in string format specifier
数字类型
format specification中,对于数字类型,同样有宽度,填充和对齐方式选项,相对于字符串,数字类型还支持:
- sing 控制符 ’+‘ ’-‘ ’和space
- 进制转换
- 小数位控制
- 前导0
- 第四种对齐方式‘=’
sing位
数字专用,sign 位置在对齐align后面,#、前导0或宽度前面;
sign | 正数3.14 | 负数3.14 |
---|---|---|
“+” | 不显示符号“3.14” | 显示负号(-)“-3.14” |
“-” | 显示正号(+)“+3.14” | 显示负号(-)“-3.14” |
空格 | 前面有个空格“ 3.14” | 显示负号(-)“-3.14” |
进制转换和井号
花括号内最右边的字段type,用来指这个数据如何被显示出来。对整数来说,可以指定type很多,如下表:
Type | Meaning |
---|---|
'b' |
Binary format. Outputs the number in base 2. 二进制 |
'c' |
Character. Converts the integer to the corresponding unicode character before printing.字符 |
'd' |
Decimal Integer. Outputs the number in base 10. 默认,十进制 |
'o' |
Octal format. Outputs the number in base 8.八进制 |
'x' |
Hex format. Outputs the number in base 16, using lower- case letters for the digits above 9.小写16进制 |
'X' |
Hex format. Outputs the number in base 16, using upper- case letters for the digits above 9.大写16进制 |
'n' |
Number. This is the same as 'd' , except that it uses the current locale setting to insert the appropriate number separator characters. |
None | The same as 'd' . |
>>> '{:}'.format(97)
'97'
>>> '{:d}'.format(97)
'97'
>>> '{:n}'.format(97)
'97'
>>> '{:b}'.format(97)
'1100001'
>>> '{:o}'.format(97)
'141'
>>> '{:x}'.format(97)
'61'
>>> '{:c}'.format(97)
'a'
>>> '{:x}'.format(0x61)
'61'
井号#用来显示数字的前缀
>>> '{:#b}'.format(97)
'0b1100001'
>>> '{:#x}'.format(97)
'0x61'
来个组合的,显示97的二进制形式,显示正负号,指定宽度为20,居中对齐,填充@
>>> '{:@^+#20b}'.format(97)
'@@@@@+0b1100001@@@@@'
小数点精度
对于小数位,type位有很多,我就能看懂f e 和 %,只用过f和%,别的还没用过。
type 'f', 将数字表示为小数部分,默认为6位小数点;超位舍弃,"四舍六入五取偶"的方式舍弃
>>> '{:f}'.format(122)
'122.000000'
>>> '{:f}'.format(122.0000006)
'122.000001'
使用.precision用来确定小数点精度;其位置在倒数第二位[type]前面
>>> '{:.2f}'.format(122.0000006)
'122.00'
居中对齐,宽度20,两位小数点位置,填充为-
>>> '{:-^20.2f}'.format(122)
'-------122.00-------'
前导0和align ‘=’
对字符串指定宽度,默认alignment 为 ‘<’ 左对齐;
对数字,指定快递,默认alignmeng为‘>‘ 右对齐;
>>> '{:10}'.format('-12') #字符串
'-12 '
>>> '{:10}'.format(-12) #数字
' -12'
空白字符默认为空格;可以使用前导0对空白字符进行填充;
>>> '{:010}'.format(-12)
'-000000012'
使用前导0后,其对齐方式看似右对齐('>'),其实是使用了对齐方式‘=’,'='与'>'的区别在与符号位的位置
'=',符号位置在首位;即在填充位的前面
‘>’,符号位跟数字在一起
>>> '{:010}'.format(-12)
'-000000012'
>>> '{:>010}'.format(-12)
'0000000-12'
>>> '{:0=10}'.format(-12)
'-000000012'
>>> '{:0>10}'.format(-12)
'0000000-12'
format的嵌套
>>> '{:{}{}}'.format(3,.2,"f")
'3.00'
以下为官方文档的案例
>>> for align, text in zip('<^>', ['left', 'center', 'right']):
... '{0:{fill}{align}16}'.format(text, fill=align, align=align)
...
'left<<<<<<<<<<<<'
'^^^^^center^^^^^'
'>>>>>>>>>>>right'
>>>
>>> octets = [192, 168, 0, 1]
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
'C0A80001'
>>> int(_, 16)
3232235521
>>>
>>> width = 5
>>> for num in range(5,12):
... for base in 'dXob':
... print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
... print()
...
5 5 5 101
6 6 6 110
7 7 7 111
8 8 10 1000
9 9 11 1001
10 A 12 1010
11 B 13 1011
字符串之format整理的更多相关文章
- Python内置的字符串处理函数整理
Python内置的字符串处理函数整理 作者: 字体:[增加 减小] 类型:转载 时间:2013-01-29我要评论 Python内置的字符串处理函数整理,收集常用的Python 内置的各种字符串处理 ...
- javascript中字符串常用操作整理
javascript中字符串常用操作整理 字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用 ...
- Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助
Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助 目录 Pychar ...
- 【转】Python格式化字符串str.format()
原文地址:http://blog.xiayf.cn/2013/01/26/python-string-format/ 每次使用Python的格式字符串(string formatter),2.7及以上 ...
- 字符串str.format()方法的个人整理
引言: 字符串的内置方法大致有40来个,但是一些常用的其实就那么20几个,而且里面还有类似的用法,区分度高比如isalpha,isalnum,isdigit,还有一些无时不刻都会用到的split切分, ...
- C语言字符串操作函数整理
整理C语言字符串相关的函数,以程序方式验证,以注释方式做说明. #include<stdio.h> #include<string.h> #include<stdlib. ...
- Python 中格式化字符串 % 和 format 两种方法之间的区别
Python2.6引入了 format 格式化字符串的方法,现在格式化字符串有两种方法,就是 % 和 format ,具体这两种方法有什么区别呢?请看以下解析. # 定义一个坐标值 c = (250, ...
- python中的printf:%号拼接字符串和format函数
在C语言中,我们使用printf("%s","hello")这种形式进行字符串的拼接 在python中,进行这样的拼接有两种实现方式,分别是%号拼接以及使用fo ...
- python3字符串格式化format()函数的简单用法
format()函数 """ 测试 format()函数 """ def testFormat(): # format()函数中有几个元素, ...
随机推荐
- PreparedStatement 以及事务的注意事项
a).PreparedStatement 可以进行批量操作,但是与Statement有一定的区别 1. Statement可以进行不同sql语句的批量操作 即可以同时进行 crud 操作. Strin ...
- 链表--笔记--数据结构(C++版)王红梅--自我思路整理与梳理
看到这篇文的很多人大概都知道链表是个什么玩意了.简单说就是一个又一个的指针,指针之间用指针连接起来. 本文的阅读 适合有c++基础的人群 以下: 这叫做一个结点. 这就是一个链表.我们主要使用的是 ...
- WINDOWS7 系统中建立文件夹映射
如何在WIN7中建立文件夹映射,还有以及MKLINK的具体使用方法: 步骤如下: 1.以映射d盘1文件夹为例: 2.按win+r,输入cmd,点击确定: 3.提示符后输入mklink /J " ...
- 福建工程学院第十四届ACM校赛J题题解
第六集,想不到你这个浓眉大眼的都叛变革命了 题意: 给你两个只包含01的字符串S和T,问你在允许一次错误的情况下,T是否能成为S的子串 思路: 这个问题的解法挺多,我是用fft匹配的,也比较简单,针对 ...
- sql--select into,create database,create table,Constraints
SQL SELECT INTO 语句可用于创建表的备份复件.SELECT INTO 语句SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中.SELECT INTO 语句常用于创建 ...
- Css几个兼容性问题
1.BUG_fireFox!!!一个容器内的子容器如果要左右浮动的话,需要在这个容器设置上样式:"overflow:hidden". 注:内部元素浮动就会导致外面的容器的高度在fi ...
- luogu题解 P1707 【刷题比赛】矩阵加速递推
题目链接: https://www.luogu.org/problemnew/show/P1707 分析: 洛谷的一道原创题,对于练习矩阵加速递推非常不错. 首先我们看一下递推式: \(a[k+2]= ...
- mysql设计与优化以及数据库表设计与表开发规范
一.设计问题? 1.主键是用自增还是UUID ? Innodb 中的主键是聚簇索引. 如果主键是自增的,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的 ...
- python之requests示例
一) import requests def download(url, num_tries=, user_agent='wswp', proxies=None): ''' 下载指定url并返回网页内 ...
- Delphi 鼠标的编程