python笔记03:使用字符串

3.1 基本字符串操作:

所有的标准序列操作(索引,分片,乘法,判断成员资格,求长度,取最小值,取最大值)对于字符串同样有效。但是,请记住:字符串都是不可变的

3.2 字符串格式化:精简版

字符串格式化使用字符串格式化操作符,即百分号%来实现。
%也可以用做莫运算(求余)操作符。
在%的左侧放置一个字符串(格式化字符串),而右侧则放置希望被格式化的值。可以使用一个值,如一个字符串或者数字,也可以使用多个值的元组或者字典。一般情况下使用元组:
>>> format = "Hello,%s,%s enough for ya?"
>>> values = ('world','Hot')
>>> print format % values
Hello,world,Hot enough for ya?
注意:
1.如果使用列表或者其他序列代替元组,那么序列会被解释为一个值。只有元组和字典可以格式化一个以上的值。
2.格式化字符串的%s部分被称为转换说明符,他们标记了需要插入转换值的位置。s表示值会被格式化为字符串----如果不是字符串,则会用str将其转换为字符串。
3.如果要在格式化字符串里面包括百分号,那么必须使用%%,这样python就不会将百分号误认为是转换说明符了
4.如果要格式化实数(浮点数),可以使用f说明转换说明符的类型,同时提供所需要的精度:一个句点再加上希望保留的小数位数。因为格式化转换说明符总是以表示类型的字符结束,所以精度应该放在类型字符前面:
>>> format = "Pi with three decimals: %.3f"
>>> from math import pi
>>> print format % pi
Pi with three decimals: 3.142

3.2.1 模版字符串

string提供另一种格式化值的方法:模版字符串。它的工作方式类似于很多UNIX Shell中的变量替换。如下所示:
substitute这个模版方法会用传递进来的关键字foo替换字符串中的$foo:
>>> from string import Template
>>> s = Template('$x,glorious $x!')
>>> s.substitute(x='slurm')
'slurm,glorious slurm!'
如果替换的事单词的一部分,那么参数名就必须用括号括起来,从而准确指明结尾:
>>> s = Template("It's ${x}tastic")
>>> s.substitute(x='slurm')
"It's slurmtastic"
可以使用$$插入美元符号:
>>> s = Template("Make $$ selling $x!")
>>> s.substitute(x='slurm')
'Make $ selling slurm!'
除了关键字参数之外,还可以使用字典提供的键值对
>>> s = Template('A $thing must never $action.')
>>> d = {}
>>> d['thing'] = 'gentleman'
>>> d['action'] = 'show his socks'
>>> s.substitute(d)
'A gentleman must never show his socks.'
方法safe_substitute不会因缺少值或者不正确使用$字符而出错

3.3 字符串格式化:完整版

格式化操作符的右操作数可以是任意类型,如果是元组或映射类型(如字典),那么字符串格式化将有所不同。
如果右操作数是元组的话,则其中的每一个元素都会被单独格式化,每个字都需要一个对应的转换说明符
如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用圆括号括起来,以避免出错
>>> '%s plus %s equals %s' % (1,2,3)
'1 plus 2 equals 3'
>>> '%s plus % equals %s.' % 1,2,3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string

3.3.1 基本的转换说明符

基本的转换说明符包括以下部分。注意,这些项的顺序是至关重要的
1.%字符:标记转换说明符的开始
2.转换标志(可选):“-”表示左对齐;“+”表示在转换值之前要加上正负号;""(空白字符)表示正数之前保留空格;0表示转换值若位数不够则用0填充
3.最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度,如果是*,则宽度会从值元组中读出
4.点(.)后跟精确度(可选):如果转换的时实数,精确度就表示出现在小数点后的位数,如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将会从元组中读出
5.转换类型:如下所示
转换类型 含义
d,i 带符号的十进制整数
o 不带符号的八进制
u 不带符号的十进制
x 不带符号的十六进制(小写)
X 不带符号的十六进制(大写)
e 科学技术法表示的浮点数(小写)
E 科学技术法表示的浮点数(大写)
f,F 十进制浮点数
g 如果指数大于-4或者小于精度值则和e相同,其他情况与e相同
G 如果指数大于-4或者小于精度值则和e相同,其他情况与E相同
C 单字符(接收整数或者单字符字符串)
r 字符串(使用repr转换任意python对象)
s 字符串(使用str转换任意python对象)

3.3.2 简单转换

简单的转换只需要写出转换类型,使用起来很简单:
>>> 'Price of eggs: %d' % 42
'Price of eggs: 42'
>>> 'Hexadecimal price of eggs: %x.' % 42
'Hexadecimal price of eggs: 2a.'
>>> from math import pi
>>> 'Pi: %f...' %pi
'Pi: 3.141593...'
>>> 'Pi: %f...' % pi
'Pi: 3.141593...'
>>> 'Very inexact estimate of pi: %i.' % pi
'Very inexact estimate of pi: 3.'
>>> 'Using str: %s.' % 42L
'Using str: 42.'
>>> 'Using repr: %r.' % 42L
'Using repr: 42L.'

 

3.3.3 字段宽度和精度

转换说明符可以包括字段宽度与精度。字段宽度是转换后的值会所保留的最小字符个数,精度(对于数字转换来说)则是结果中应该包含的小数位数,或者(对于字符串转换来说)是转换后的值所能包含的最大字符个数。
这两个参数都是整数(首先是字段宽度,然后是精度),通过点号(.)分隔。虽然两个都是可选的参数,但是如果只给出精度,就必须包含点号:
>>> '%10f ' % pi   #字段宽10
'  3.141593 '
>>> '%10.2f' % pi  #字段宽10,精度2
'      3.14'
>>> '%.2f' % pi    #精度2
'3.14'
>>> '%.5s' % 'Guido van Rossum'
'Guido'
可以使用*(星号)作为字段宽度或者精度(或两者都用*),此时数值会从元组参数中读出:
>>> '%.*s' % (5,'Guido van Rossum')
'Guido'

3.3.4 符号、对齐和用0填充

在字段宽度与精度之前还可以放置一个“标志”,该标志可以是零,加号,减号或空格。零表示数字将会用0进行填充。
 
注意:在010开头的那个0并不意味着字段宽度说明符为八进制数,他只是个普通的python数值。当使用010作为字段宽度说明符时,表示字段宽度为10,并且用0进行填充空位,而不是说字段宽度为8。
posted @ 2017-09-25 20:48  flyme123  阅读(248)  评论(0编辑  收藏  举报