【书山有路】Python基础教程 第3章

本章的主要内容是“使用字符串”。介绍一下如何使用字符串格式化其他的值,并了解一下利用字符串的分割、连接、搜索等方法能做些什么。

注意点

字符串是不可变的

下列的操作是非法的:

website = "http://www.python.org"
website[-3:] = "com"

输出:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

格式化字符串中%的处理

如果要在格式化字符串中包括百分号,必须使用%%,避免Python将百分号误认为是转换说明符。

格式化操作符的右操作数

如果右操作数是元组的话,则其中每一个元素都会被单独格式化,每个值都需要一个对应的转换说明符。

字符串格式化转换类型表

下面给出字符串格式化中个转换类型及含义的列表。

转换类型含义
d,i带符号的十进制整数
o不带符号的八进制
u不带符号的十进制
x不带符号的十六进制(小写)
X不带符号的十六进制(大写)
e科学计数法表示的浮点数(小写)
E科学计数法表示的浮点数(大写)
f,F十进制浮点数
C单字符(接受整数或者单字符字符串)
r字符串(使用repr转换任意Python对象)
s字符串(使用str转换任意Python对象)

基本转换说明符的组成

基本转换说明符由以下几个部分组成,这些项的顺序是至关重要的。

  1. %字符:标记转换说明符的开始
  2. 转换标志(可选): - 表示左对齐;+表示在转换值之前要加上正负号;”“(空白字符)表示整数之前保留空格;0表示转换值如果位数不够则用0填充。
  3. 最小字段宽度(可选): 转换后的字符串之手应该具有该值指定的宽度。
  4. 点(.)后跟精度值(可选):如果转换的是实数,精度值表示出现在小数点后的位数。如果转换的是字符串,该数字表示最大字段宽度。
  5. 转换类型:见上表。

字符串的格式化

在%的左边放置一个字符串(格式化字符串),右侧则放置希望格式化的值。可以用一个值(如一个字符串或者数字),也可以使用多个值的元组或者字典。

例如下面一个例子:

format = "Hello, %s. %s engough for ya?"
values = ('World', 'Hot')
print(format % values)

输出:

Hello, World. Hot engough for ya?

如果使用列表或者其他序列代替元组,那么序列就会被解释为一个值。只有元组和字典可以格式化一个以上的值。

浮点数指定精度

使用下面的代码来格式化指定精度的浮点数。

format = "Pi with three decimals: %.3f"
from math import pi
print(format % pi)

输出:

Pi with three decimals: 3.142

模板字符串

substitute方法会用传递进来的关键字参数x替换字符串中的$x

使用下面的代码:

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('A $thing must never $action')
d = {}
d['thing'] = 'gentleman'
d['action'] = 'show his socks'
s.substitute(d)

输出:

'A gentleman must never show his socks' 

字段宽度和精度

这两个参数都是整数(首先是字段宽度,然后是精度),通过点号(.)分隔。虽然两个都是可选查收,但如果只给出精度,就必须包含点号。查看下面的代码:

>>> '%10f' %pi      # 字段宽10
'  3.141593'
>>> '%10.2f' % pi   # 字段宽10,精度2
'      3.14'
>>> '%.2f' % pi     # 精度2
'3.14'

可以使用*作为字段宽度或者精度(或者两者都使用*),此时数值会从元组参数中读出:

'%.*s' % (5, 'Guido van Rossum')

输出:

'Guido'

空白和加号

空白意味着在正数前面加上空格,这在需要对其正负数时会很有用。

print(('% 5d' % 10) + '\n' + ('% 5d' % -10))

输出:

 10
-10

加号表示不管是正数还是负数都标示出符号(同样在对齐时很有用):

print(('%+5d' % 10) + '\n' + ('%+5d' % -10))

输出:

 10
-10

字符串方法

find方法

find方法可以在一个较长的字符串中查找子字符串。它返回子串所在位置的最左端索引。如果没有找到则返回-1

使用下面的代码:

>>> title = "Monty Python's Flying Circus"
>>> title.find('Monty')
0
>>> title.find('Python')
6
>>> title.find('aaaa')
-1

这个方法还接受可选的起始点和结束点参数。由起始和终止值指定的范围包含第1个索引但不包含第2个索引。

join方法

join方法将一个列表用指定的分隔符连接起来。

dirs = ['', 'usr', 'bin', 'env']
'/'.join(dirs)

输出:

'/usr/bin/env'

lower方法

lower方法返回字符串的小写字母版。

使用下面的代码:

'Trondheim Hammer Dance'.lower()

输出:

'trondheim hammer dance'

split方法

split方法用来将字符串分隔成序列。

使用下面的代码:

'1+2+3+4+5'.split('+')

输出:

['1', '2', '3', '4', '5']

如果不提供任何分隔符,程序会把所有空格作为分隔符(空格、制表、换行等)。

translate方法

感觉这个用不到又比较复杂,先略过去了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值