您的位置:首页 > 编程语言 > Python开发

3.使用字符串【python基础教程第三版 笔记】

2019-03-04 22:33 513 查看

字符串的基本操作

所有标准序列操作都适用于字符串,但字符串是不可变的,原有的元素赋值和切片赋值都是非法的:

>>>website = "www.faifj.com"
>>>website[-3:] = 'com'
TypeError:object doesn't support slice assignment

设置字符串的格式

1.使用百分号

>>>format = "hello, %s. %s enough for ya?"
>>>values = ('world','hot')
>>>format % values
'hello world.hot enough for ya?'

%s为转换说明符,%s设置为字符串,%.3f设置为包含3位小数的浮点数

2.类似Unix shell

>>>from string import Template
>>>tmpl = Template("hello \$who !,\$what enough for ya?")
>>>tmpl.substitude(who = "mars",what = "hot") 包含等号的参数叫做关键字参数
hello mars!hot enough for ya?

3.字符串方法format

>>>"{},{} and {}".format("one","tow","three")
'first,second and three

>>>"{3} {0} {2} {1} {3} {0}".format("be","not","or","to")
>>>"to be or not to be"
索引{}为自动编号,{0}为手动编号,不能同时使用自动和手动。

>>>"{foo},{},{bar},{}".format(1,2,bar=3,foo=4)
>>>"4,1,3,2"
数字不能放在关键字参数后面,也不能索引{2}位置的参数。

>>>from math import pi
>>>"{name} is about {value:.2f}".format(value = pi, name = "pi")
pi is about 3.14

如果变量名和替换字段同名,还可以简写——在字符串前面加上f

>>>from math import e
>>>f"roughly {e:.2f}" 等价于 " roughly {e:2f} ".format(e=e)
"roughly 2.71"

如果要包含花括号,就用两个花括号:

>>>"{{qwerty}}".format()
>>>"{qwerty}"

不仅能使用值本身,还可以访问它的其他组成:

>>>full_name = ["1","2"]
>>>"my name is {name[1]}".format(name=full_name)
"my name is 2"

>>>import math
>>>temp = "the {mod._name_} defines {(mod.pi):.2f} for pi"
>>>temp.format(mod=math)
"the math defines 3.14 for pi"

4.基本转换提供转换标志

>>>print("{pi!s}{pi!r}{pi!a}"),format=" π"
π ' π' '\u03c0'

s代表string,转化为基本字符串
r代表repr,转化为给定值的python表示(python2中是ascii码,这里是字符串字面量)
a代表ascii,转换为ascii码

5.指定宽度

>>>"{num:10}".format(num=3)
>>>"9个空格+3"
>>>"{name:10}".format(name="b")
>>>"b+九个空格"

数和字符串的对齐方式不同

6.指定精度

>>>"{pi:10.2f}".format(pi=pi)
"6个空格+3.14"

>>>"{:5}".format("qwertdhfh")
'qwert'

7.千位分隔符

>>>"{:,}".format(10*100000)
'1,000,000'

同时设定宽度、精度、分隔符

>>>{:10,.2f}.format(10*100000)
1,000,000.00

8.符号、对齐、用0填充
用0填充,也可以是加号减号$或空格,

>>>"{:010.2f}".format(pi)
'0000003.14'

左对齐< 右对齐> 居中^
>>>print({0:<10.2f}{0:>10.27}{0:^10.2f}).format(pi))
3.14
3.14
3.14

前面加-为默认,遇到负数时要注意:
>>>print(“{0:-.2}”\n{1:-.2}.format(pi,-pi))
3.1
-3.1

说明符=
>>>print("{0:10.2f}\n{1:10.2f}.format(pi,-pi)")
3.14
-3.14

>>>print("{0:10.2f}\n{1:=10.2f}.format(pi,-pi)")
3.14
-     3.14

9.#指定符号
对于二、八、十六进制,会在前面加上进制符前缀

>>>"{'0:b'}".format(42)
'101010'
>>>"{0:#b}".format(42)
'0b101010'

对于十进制,要求必须包含小数点

>>>"{:g}".format(42)
'42'
>>>"{:#g}".format(42)
'42.0000'

字符串格式优先级
{索引:填充符号 # 对齐 宽度 分隔符 精度}

模块string中几个很有用的常量

  • string digits:包含数字0-9的字符串
  • string.ascin_letters:包含所有ASCII字母(包括大小写)的字符串
  • string.ascii_lowercase:包含所有小写ASCII字母的字符串
  • string.printable:包含所有可打印的ASCII字符的字符串
  • string.punctuation:包含所有ASCII标点字符的字符串
  • 虽说是ascii字符串,但值是未编码的Unicode字符串。

常见的字符串方法

1.center 填充字符居中

>>>"center".center(10.*)
"\*\*center\*\*"

2.find 寻找子串

>>>name = '$$$hifeo'
>>>name.find('\$$$')
0
如果找到,返回第一个字符所在的索引,没找到返回-1

和in的区别
- python2.3之前,in只能查找单个字符
- in返回的是布尔值,find返回的是数值

还可以指定搜索的起点和终点:
object.find(字符串,起点,终点),包含起点,不包含终点。

3.join 合并字符串
常见错误

>>>seq = [1,2,3,4,5]
>>>sep = '+'
>>> sep.join(seq)
错误,只能合并字符串,而seq中的元素类型是int

>>>seq = [‘1‘,’2‘,’3‘,’4‘,’5‘]
>>>sep = '+'
>>> sep.join(seq)
'1+2+3+4+5'

4.replace指定字串替换
object.replace(’指定字符串‘,’要替换的字符串‘)
可实现查找替换功能。

5.split 将字符串拆分为序列

>>>'1+2+3+4+5'.split('+')
['1','2','3','4','5']

6.strip删除开头和末尾的空白

>>>names = ['1','2','3']
>>>name = '1 '(1后面多了个空格)
>>>name.strip() in names
true

还可以指定要删除的元素(仅删除开头和结尾,中间不删除):

>>>'*** SPAM * for * everyone!!!**'.strip('*!')
'SPAM * for * everyone'

7.translate替换字符的特定部分

和replace的区别:

  • 只能进行单字符替换
  • 能够同时替换多个字符,效率比replace高

使用translate首先要创建转换表,对字符串类型str调用maketrans(‘要查找的字符串’,‘要替换的字符串’,‘要删除的字符’),两个字符串长度必须相同,前一个参数中的每个字符替换成后一个参数的相应字符。

#创建转换表

>>>table = str.maketrans('cs','ab','llo')

#使用translate参数

>>>"hillo cs" .translate(table)
'hi ab'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: