字符串

常见字符串常量和表达式python

s = '' #空字符串
s = "spam's" #双引号和单引号
s = 's\np\ta\x00m' #转义序列
s = """...""" #三重引号字符串块
s = r'\temp\spam' #Raw字符串
s = b'spam' #python3.0中的字节字符串
s = u'spam' #仅在python2.6中使用的unicode字符串
s1 + s2 #合并
s * 3 #重复
s[i] #索引
s [i:j] #分片
len(s) #求长度
"a %s parrot" % kind #字符串格式化表达式
"a {0} parrot".format(kind) #python2.6和python3.0的字符串格式方法
s.find('pa') #字符串方法:搜索
s.rstrip() #移除空格
s.replace('pa', 'xx') #替换
s.split(',') #用占位符分割
s.isdigit() #检查是否只由数字组成
s.lower() #转为小写
s.endswith('spam') #是否以制定后缀结尾
'spam'.join(strlist) #插入分割符
s.encode('latin-1') #unicode编码
for x in s: print(x) #迭代,成员关系
'spam' in s
[c * 2 for c in s]
map(ord, s)

字符串常量git

单双引号字符串是同样的,并且python会自动在任意表达式中合并相邻的字符串常量。数据库

title = "Meaning " 'of' " Life"
#'Meaning of Life'

用转义序列表明特殊字节工具

\newline #忽视(连续)
\\ #反斜杠
\' #单引号
\" #双引号
\a #响铃
\b #倒退
\f #换页
\n #换行
\r #返回
\t #水平制表符
\v #垂直制表符
\N #unicode数据库ID
\uhhhh #unicode 16位的十六进制值
\Uhhhhhhhh #unicode 32位的十六进制值
\xhh #十六进制值
\0xx #八进制值
\0 #Null
\other #不转义

一些转义字符容许一个字符串中嵌入绝对的二进制值。编码

s = 'a\0b\0c'
s
#'a\x00b\x00c'
len(s)
#5

注意,python以十六进制现实非打印的字符。spa

若是python找不到合法的转义编码,就会保留反斜杠。code

raw字符串抑制转义orm

若是使用如下参数去打开文件就会出错:对象

myfile = open('C:\new\text.dat', 'w')

\n会被识别为一个换行字符,\t会被识别为一个制表符。若是在字符串第一个引号前面放一个字母r(大写或小写),它就会关闭转义机制。blog

myfile = open(r'C:\new\text.dat', 'w')

还有一种办法,用两个反斜杠来表明一个反斜杠。

myfile = open('C:\\new\\text.dat', 'w')

三重引号编写多行字符串块

若是但愿一些行的代码不工做,以后再运行,能够简单在这几行先后加入三重引号。

x = 1
"""
import os
print(os.getcwd())
"""
y = 2

实际应用中的字符串

基本操做

字符串能够用+来合并,*来重复。

'abc' + 'def'
#'abcdef'

'NI!' * 5
#'NI!NI!NI!NI!NI!'

能够用for语句在字符串中循环迭代,in操做符能够对字符串进行搜索。

my = 'dsfdgdfg'
for c in my:
     print(c, end = ' ')
#d s f d g d f g

'd' in my
#True

'f' in my
#True

索引和分片

python能够经过索引来获取字符串中的字符,python的偏移量从0开始,而且还支持负偏移量,一个负偏移加上字符串的长度就等于正偏移,能够把负偏移看作从结束处反向计数。

s = 'spam'
s[0], s[-2]
#('s', 'a')

s[1:3], s[1:], s[:-1]
#('pa', 'pam', 'spa')

当使用分片时,左边的偏移做为下边界(下边界包含在内),右边的偏移做为上边界(不包含上边界在内)。python将获取从下边界开始直到不包含上边界的全部元素。若是省略,上下边界默认分别是0和对象的长度。

索引s[i]获取特定偏移的元素:

  • 第一个元素偏移为0
  • 负偏移意味着从最后或右边反向计数
  • s[0]获取第一个元素,s[-2]获取倒数第二个元素,就和s[len(s)-2]同样

分片s[i:j]提取对应部分做为一个序列:

  • 上边界并不包含在内
  • 分片的默认边界为0和序列的长度
  • s[1:3]获取了从偏移为1的元素到不包含偏移为3的元素
  • s[:]获取了偏移0到末尾之间的元素,有效实现顶层s拷贝

s[i:j]实现了一个彻底的顶层的序列对象的拷贝,一个有相同值,可是不一样内存片区的对象。但对于字符串这样不可变对象并非颇有用,但对于能够原地修改的对象却很实用,例如列表。

扩展分片:第三个限制值

分片的第三个索引,是步进。完整的分片为x[i:j:k],这表示“索引x对象中的元素,从偏移为i知道偏移为j-1,没隔k个元素索引一次”。k默认是1,若是定义了一个值,就会跳过某些元素或者反向排列顺序。

s = 'abcdefghijklmnop'
s[1:10:2]
#'bdfhj'
s[::2]
#'acegikmo'

若是使用负数做为步进,步进-1表示从右往左,实际效果就是将序列反向。

s = 'hello'
s[::-1]
'olleh'

字符串转换工具

int('42'), str(42)
#(42, '42')

repr(42)
#'42'

int()将字符串转换成数字,而str()将数字转换成字符串。repr()也能够转换对象为字符串。

repr()与str()的区别是,repr()返回的对象能够做为代码字符串,能够从新建立对象,也就是说obj = eval(repr(obj))是成立的。

字符串代码转换

单个字符能够传给ord()转换为对应的ASCII码。

ord('s')
#115

chr(115)
#'s'

下面的程序能够转换二进制数为十进制数:

b = '1101'
i = 0
while b != '':
    i = i * 2 + (ord(b[0]) - ord('0'))
    b =b[1:]
i
#13

修改字符串

字符串是不可变序列,因此想要原地修改字符串会报错,所以须要利用合并,分片这样的工具来处理而后赋值给一个新的字符串。也能够使用字符串格式化。

注意:

python3.0和2.6中引入了一种新字符串类型bytearray,它能够修改。bytearray并非真正的字符串,它是较小的,8位整数序列。

字符串方法

相关文章
相关标签/搜索