字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串.
创建字符串很简单,只要为变量分配一个值即可。例如:
s = 'Hello World!'
Python字符串属性方法操作:
1.字符串格式输出对齐
>>> str = "Python stRING"
>>> str.center(20) #生成20个字符长度,str排中间'Python stRING'
>>> str.ljust(20) #生成20个字符长度,str左对齐'Python stRING'
>>> str.rjust(20) #生成20个字符长度,str右对齐'Python stRING'
>>>
2.大小写转换
>>> str = "Python stRING"
>>> str.upper() #转大写
'PYTHON STRING'
>>> str.lower() #转小写
'python string'
>>> str.capitalize() #字符串首为大写,其余小写
'Python string'
>>> str.swapcase() #大小写对换
'pYTHON STring'
>>> str.title() #以分隔符为标记,首字符为大写,其余为小写
'Python String'
3.字符串条件判断
>>> str = '01234'
>>> str.isalnum() #是否全是字母和数字,并至少有一个字符
True
>>> str.isdigit() #是否全是数字,并至少有一个字符
True
>>> str = 'string'
>>> str.isalnum() #是否全是字母和数字,并至少有一个字符
True
>>> str.isalpha() #是否全是字母,并至少有一个字符
True
>>> str.islower() #是否全是小写,当全是小写和数字一起时候,也判断为True
True
>>> str = "01234abcd"
>>> str.islower() #是否全是小写,当全是小写和数字一起时候,也判断为True
True
>>> str.isalnum() #是否全是字母和数字,并至少有一个字符
True
>>> str = ' '
>>> str.isspace() #是否全是空白字符,并至少有一个字符
True
>>> str = 'ABC'
>>> str.isupper() #是否全是大写,当全是大写和数字一起时候,也判断为True
True
>>> str = 'Aaa Bbb'
>>> str.istitle() #所有单词字首都是大写,标题
True
>>> str = 'string learn'
>>> str.startswith('str') #判断字符串以'str'开头
True
>>> str.endswith('arn') #判读字符串以'arn'结尾
True
4.字符串搜索定位与替换
>>> str='string lEARn'
>>> str.find('z') #查找字符串,没有则返回-1,有则返回查到到第一个匹配的索引
-1
>>> str.find('n') #返回查到到第一个匹配的索引
4
>>> str.rfind('n') #返回的索引是最后一次匹配的
11
>>> str.index('a') #如果没有匹配则报错
Traceback (most recent call last):
File "", line 1, in
ValueError: substring not found
>>> str.index("n") #同find类似,返回第一次匹配的索引值
4
>>> str.rindex("n") #返回最后一次匹配的索引值
11
>>> str.count('a') #字符串中匹配的次数
0
>>> str.count('n') #同上
2
>>> str.replace('EAR','ear') #匹配替换
'string learn'
>>> str.replace('n','N')
'striNg lEARN'
>>> str.replace('n','N',1)
'striNg lEARn'
>>> str.strip('n') #删除字符串首尾匹配的字符,通常用于默认删除回车符
'string lEAR'
>>> str.lstrip('n') #左匹配
'string lEARn'
>>> str.rstrip('n') #右匹配
'string lEAR'
>>> str = " tab"
>>> str.expandtabs() #把制表符转为空格
' tab'
>>> str.expandtabs(2) #指定空格数
' tab'
5.字符串编码与解码
>>> str = "字符串学习"
>>> str
'\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2\xe5\xad\xa6\xe4\xb9\xa0'
>>> str.decode('utf-8') #解码过程,将utf-8解码为unicode
u'\u5b57\u7b26\u4e32\u5b66\u4e60'
>>> str.decode("utf-8").encode('gbk') #编码过程,将unicode编码为gbk
'\xd7\xd6\xb7\xfb\xb4\xae\xd1\xa7\xcf\xb0'
>>> str.decode('utf-8').encode('utf-8') #将unicode编码为utf-8
'\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2\xe5\xad\xa6\xe4\xb9\xa0'
6.字符串分割变换
>> str = "Learn string"
>>> '-'.join(str)
'L-e-a-r-n- -s-t-r-i-n-g'
>>> li = ['Learn','string']
>>> '-'.join(li)
'Learn-string'
>>> str.split('n')
['Lear', ' stri', 'g']
>>> str.split('n',1)
['Lear', ' string']
>>> str.rsplit('n')
['Lear', ' stri', 'g']
>>> str.rsplit('n',1)
['Learn stri', 'g']
>>> str.splitlines()
['Learn string']
>>> str.partition('n')
('Lear', 'n', ' string')
>>> str.rpartition('n')
('Learn stri', 'n', 'g')
7.截取字符串
>>> str = '0123456789'
>>> print(str[0:3]) #截取第一位到第三位的字符
012
>>> print(str[:])#截取字符串的全部字符
0123456789
>>> print(str[6:])#截取第七个字符到结尾
6789
>>> print(str[:-3])#截取从头开始到倒数第三个字符之前
0123456
>>> print(str[2])#截取第三个字符
2
>>> print(str[-1])#截取倒数第一个字符
9
>>> print(str[::-1])#创造一个与原字符串顺序相反的字符串
9876543210
>>> print(str[-3:-1])#截取倒数第三位与倒数第一位之前的字符
78
>>> print(str[-3:])#截取倒数第三位到结尾
789
>>>
Python格式化字符串的 6种方式
几乎任何一种编程语言,都把字符串列为最基础和不可或缺的数据类型。而拼接字符串是必备的一种技能。今天,我跟大家一起来学习Python拼接字符串的七种方式。
1、来自C语言的%方式
>>> print('%s %s' %('hello','world'))
hello world
%号格式化字符串的方式继承自古老的C语言,这在很多编程语言都有类似的实现。上例的%s是一个占位符,它仅代表一段字符串,并不是拼接的实际内容。实际的拼接内容在一个单独的%号后面,放在一个元组里。
类似的占位符还有:%d(代表一个整数)、%f(代表一个浮点数)、%x(代表一个16进制数),等等。%占位符既是这种拼接方式的特点,同时也是其限制,因为每种占位符都有特定意义,实际使用起来太麻烦了。
2、format() 拼接方式
>>> s1 = 'Hello {} ! My name is {}.' .format('world','梦徒')>>>print(s1)
Hello world! My name is 梦徒.
还有如下写法,
#!/usr/bin/env python
#coding:utf-8name= input('name:')
age= input('age:')
job= input('job:')
salary= input('salary:')
info= '''------------info of {_name} --------------Name:{_name}
Age:{_age}
Job:{_job}
Salary:{_salary}'''.format(_name=name,
_age=age,
_job=job,
_salary=salary)
print(info)
这种方式使用花括号{}做占位符,在format方法中再转入实际的拼接值。容易看出,它实际上是对%号拼接方式的改进。这种方式在Python2.6中开始引入。
3、面向对象模板拼接
>>> from stringimport Template>>> s = Template('${s1} ${s2}!')>>> print(s.safe_substitute(s1='Hello',s2='World'))
Hello World!
说实话,这种方法不太友好,处理个字符串感觉要面向对象了,了解就行.
4、常用的 + 号方式
s1 = 'Hello World !'s2= 'My name is 梦徒!'print(s1+s2)
Hello World!My name is 梦徒!
5、join()拼接方式
>>> str_list = ['Hello','World']>>> s_join = ''.join(str_list)>>>print(s_join)
HelloWorld>>> s_join = ' '.join(str_list)>>>print(s_join)
Hello World>>> s_join = '-'.join(str_list)>>>print(s_join)
Hello-World
str对象自带的join()方法,接受一个序列参数,可以实现拼接。拼接时,元素若不是字符串,需要先转换一下。可以看出,这种方法比较适用于连接序列对象中(例如列表)的元素,并设置统一的间隔符。
当拼接长度超过20时,这种方式基本上是首选。不过,它的缺点就是,不适合进行零散片段的、不处于序列集合的元素拼接。
6、f-string方式
>>> s1 = 'World'
>>> s2 = '梦徒'
>>> words = f'Hello {s1}. My name is {s2}.'
>>>print(words)
Hello World. My nameis 梦徒.
f-string方式出自PEP 498(Literal String Interpolation,字面字符串插值),从Python3.6版本引入。其特点是在字符串前加 f 标识,字符串中间则用花括号{}包裹其它字符串变量。
这种方式在可读性上秒杀format()方式,处理长字符串的拼接时,速度与join()方法相当。
尽管如此,这种方式与其它某些编程语言相比,还是欠优雅,因为它引入了一个 f 标识。而其它某些程序语言可以更简练,比如shell:
s1="world"s2="梦徒"words="Hello ${s1}. My name is ${s2}."echo $words>>>Hello world. My name is 梦徒.
总结一下,我们前面说的“字符串拼接”,其实是从结果上理解。若从实现原理上划分的话,我们可以将这些方法划分出三种类型:
格式化类:%、format()、template
拼接类:+、join()
插值类:f-string
当要处理字符串列表等序列结构时,采用join()方式;拼接长度不超过20时,选用+号操作符方式;长度超过20的情况,高版本选用f-string,低版本时看情况使用format()或join()方式。