Python字符串——一个有序字符的集合,用于存储和表现基于文本的信息。
Python中没有单个字符的类型,只有使用一个字符的字符串。
字符串被划分为不可变序列,意味着这些字符串所包含的字符存在从左往右的位置程序,并且不可以在原处修改。
常见字符串常量和表达式:
#
单引号:'Yert"s'
双引号:"Yert's"
三引号:"....................Yert................................"
转义字符:’\tp’
Raw字符串:r"C:w\test.com"
Python3.0中的Byte字符串:b’sp\x01
只在Python2.6出现的Unicode字符串:u’egg\suu’
单双引号的作用相同:
>>> 'Yert',"Yert"
('Yert', 'Yert')
Python自动合并相邻的字符串常量:
>>> title="The truth " 'of' "life"
>>>
>>> title
'The truth oflife'
三重引号编写多行字符串块:
>>>
>>> longfile='''
...
...
... a
... a
... a
... a
... a
... '''
>>>
>>>
>>> longfile
'\n\n\na\na\na\na\na\n'
>>>
>>> print(longfile)
a
a
a
a
a
>>>
转义字符序列:
通过反斜杠转义字符嵌入引号:
>>> 'today\'s',"yesterday\"s"
("today's", 'yesterday"s')
转义序列插入绝对的二进制值:
>>>
>>> s = 'a\0b\0c'
>>>
>>> s
'a\x00b\x00c'
>>>
>>> len(s)
5
>>>
Python会在内存中保持了整个字符串的长度和文本,Python没有字符会结束一个字符串。
>>>
>>> s = '\001\002\003'
>>>
>>> s
'\x01\x02\x03'
>>>
>>> len(s)
3
>>>
如果Python没有作为一个合法的转义编码识别出在“\”后的字符,它就直接在最终的字符串中保留反斜杠。
>>> x = "C:\py\code"
>>>
>>> x
'C:\\py\\code'
raw字符串抑制转义
Raw字符串:如果字母r(大写或小写)出现在字符串的第一引号的前面,它将会关闭转义机制。Python将反斜杠作为常量来保持,就像普通字符串,为了避免错误,在Windows系统中必须增加字母r。
>>> myfile=open(r'D:test\test.txt','w')
>>>
>>> text="I'm Yert,the word would been wroten in text."
>>>
>>> myfile.write(text)
44
>>>
>>> myfile.close()
索引和分片:
索引:
字符串在Python中被定义为字符的有序集合,可以通过位置偏移值获取字符。在Python中,字符串中的字符是通过索引(通过在字符串之后的方括号中提供所需要的元素的数字偏移量)提取的。
Python的偏移量是从0开始,并比字符串的长度小1,还支持在字符串中使用负偏移的方法从序列中获取因素。从技术上讲,一个负偏移与这个字符串长度相加可以得到它的正偏移值。
>>> S='YertAlan'
>>>
>>> S[0]
'Y'
>>> S[-1]
'n'
>>>
>>> len(S)
8
>>> S[len(S)-1]
'n'
分片:
当使用一对以冒号分隔的偏移来索引字符串时,Python将会返回一个新的对象,其中包含了以这对偏移所标识的连续内容。
>>> S[1:3]
'er'
>>> S[1:]
'ertAlan'
>>>
>>> S[::]
'YertAlan'
>>>
>>> S[-4:-1]
'Ala'
>>>
>>> S[:-2]
'YertAl'
拓展分片:第三个限制值
分片表达式增加一个可选的第三个索引,用作步进。步进添加到每个提取的元素的索引中。完×××式的分片为string[X:Y:Z],表示“索引字符串string对象中的元素,从偏移X直到偏移为Y-1,每隔Z元素索引一次”。第三个限制没人为1,所以通常在一个切片中从左至右提取每一个元素的原因。
>>> string='ABCDEFGHIJKLMNOPQRST'
>>>
>>> string[1:8]
'BCDEFGH'
>>>
>>> string[1:8:2]
'BDFH'
>>>
>>> string[1:12]
'BCDEFGHIJKL'
>>> string[1:12:3]
'BEHK'
负数步进:
>>> string[1:10]
'BCDEFGHIJ'
>>>
>>> string[1:10:-1]
''
>>> string[10:1:-1]
'KJIHGFEDC'
>>>
>>> string[10:1]
''
>>> string[10:1:-2]
'KIGEC'
字符串转换工具
>>>#将以字符串形式出现的数字进行转换:
>>> int('55'),str(55)
(55, '55')
>>> repr(55)
'55'
注意:Repr函数可以将一个对象转换为其字符串形式,然而这些返回的对象作为代码的字符串,可以重新创建对象。
>>> print(str('Yert'),repr('Yert'))
Yert 'Yert'
>>>#浮点数转换字符串:
>>> str(3.1415),float("1.5")
('3.1415', 1.5)
>>>
>>> text="1.234E-10"
>>>
>>> float(text)
1.234e-10
字符串代码转换:
单个字符可以通过将其传给内置的ord函数转换为其对应的ASCII码——则个函数实际返回的是这个字符在内存中对应的字符的二进制值。而chr函数将会执行相反的操作,获取ASCII码并将其转换为对应的字符:
>>> ord('s')
115
>>>
>>> chr(115)
's'
>>>#执行基于字符串的数学运算:
>>> S='a'
>>> S=chr(ord(S)+1)
>>> S
'b'
>>> S=chr(ord(S)+1)
>>>
>>> S
'c'
>>> int('5')
5
>>>
>>> ord('5') - ord('0')
5
与循环语句结合,进行整数的处理:
将二进制字符串转换为整数,并将当前值乘以2,并加上下一位数字值。
>>> B = '1101'
>>> I = 0
>>> while B != '':
... I = I * 2 + (ord(B[0])-ord('0'))
... B = B[1:]
...
>>>
>>> I
13
>>>
修改字符串
>>>#使用合并、分片:
>>> S='Yert'
>>>
>>> S = 'Yert'
>>> S = S + 'Alan'
>>> S
'YertAlan'
>>> S = S[:4] + '·D·' + S[4:] #D之一族
>>>
>>> S
'Yert·D·Alan'
使用replace函数修改(索引到字符串,将其改为指定字符串):
>>> S=S.replace('Alan','King')
>>> S
'Yert·D·King'
通过字符串格式化表达式来创建新字符串:
>>> "March %sst,I'm a apple,I'm have a %s" % (1,'pencil')
"March 1st,I'm a apple,I'm have a pencil"
>>>
>>> "March {0}st,I'm a apple,I'm have a {1}".format(1,'pencil')
"March 1st,I'm a apple,I'm have a pencil"
使用find方法进行修改:
>>> S = '13658934230' #实现修改号码,保护隐私
>>>
>>> node = S.find('5893')
>>>
>>> node
3
>>> S = S[:node] + 'XXXX' + S[(node+4):]
>>>
>>> S
'136XXXX4230'
使用合并操作和replace方法每次运行产生新的字符串对象,会消耗性能,所以在对超长文本进行多处修改时,需要将字符串转换为一个支持原处修改的对象。
>>> S = 'yert'
>>>
>>> L = list(S)
>>>
>>> L
['y', 'e', 'r', 't']
内置的list函数(或一个对象构造函数调用)以任意序列中的元素创立一个新的列表,可以将字符串中的字符分解为一个列表。
Join函数可以将列表合成为一个字符串:
>>> D = ''.join(L)
>>>
>>> D
'yert'
其他字符串方法:
>>>#通过分片的方式将数据从原始字符串中分离,称为解析。
>>> S
'yert'
>>>
>>> J = S[1:3]
>>>
>>> J
'er'
>>>#如果分隔符分开了数据组件,可以使用split方法提取组件。
>>> date = 'My name is Yert'
>>>
>>> cols = date.split()
>>>
>>> cols
['My', 'name', 'is', 'Yert']
>>>
>>> long_str = 'My name is Yert, I am a computer engineer,I am studing Python'
>>>
>>> cols = long_str.split(',')
>>>
>>> cols
['My name is Yert', ' I am a computer engineer', 'I am studing Python']
>>> line = 'The dog is Sam which it is yellow ! \n'
>>>#清除每行末尾空白
>>> line.rstrip()
'The dog is Sam which it is yellow !'
>>>#全部转换大写
>>> line.upper()
'THE DOG IS SAM WHICH IT IS YELLOW ! \n'
>>>#测试内容
>>> line.isalpha()
False
>>>
>>>#检测末尾内容字符串
>>> line.endswith('! \n')
True
>>>#检测开始内容字符串
>>> line.startswith('The')
True
>>> line[-len('! \n'):] == '! \n'
True
>>>
>>> line[:len('The ')] == 'The '
True
字符串格式化表达式
格式化字符串:
>>> '%d years later,I have became a %s!' % (3,'engineer')
'3 years later,I have became a engineer!'
高级字符串格式化表达式:
转换目标通用结构:
%[ (name) ] [flags] [width] [.precision] typecode
表中的字节码出现在目标字符串的尾部,在%和字符码只间:可以放置一个字典的键;罗列出左对齐(-)、正负号(+)和补零(0)的标志位;给出数字的整体长度和小数点后的位数等。Width和precision都可编码为一个*,以指定它们应该从输入值的下一项中取值。
>>>#%d对整数进行默认,%-6d进行6位的左对齐格式化,%06d进行6位补零的格式化
>>> M = 24
>>>
>>> resu = "result: %d %-6d %06d" % (M,M,M)
>>>
>>> resu
'result: 24 24 000024'
>>>#可以在格式化字符串中用一个*来指定通过计算得出width和precision,从而迫使它们的值从%运算符右边的输出中的下一项获取,元组中的4指定为precision。
>>> '%f,%.2f,%.*f' % (1/3.0,1/3.0,4,1/3.0)
'0.333333,0.33,0.3333'
基于字典字符串格式化
>>>#通过字典的键来提取对应的值:
>>> "%(a)d %(x)s" % {'a':1,'x':'Yert'}
'1 Yert'
>>>#Format方法格式化字符串:
>>> date = '{0},{1} and {2}'
>>>
>>> date.format('Python','PHP','Go')
'Python,PHP and Go'
>>>
>>> date = '{a},{b} and {c}'
>>>
>>> date.format(a='Python',b='PHP',c='Go')
'Python,PHP and Go'
>>>
>>>
>>> date = '{a},{0} and {c}'
>>>
>>> date.format('PHP',a='Python',c='Go')
'Python,PHP and Go'
格式化字符串可以指定对象属性和字典键。
>>> import sys
>>>
>>> 'The machine {1[name]} runs {0.platform}'.format(sys,{'name':'Yert'})
'The machine Yert runs win32'
>>>
>>> 'The machine {config[name]} runs {sys.platform}'.format(sys=sys,config={'name':'Yert'})
'The machine Yert runs win32'
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。