表示方法
用“”或者‘’包裹起来的一串字符,为了和其他语言保持一致,Python尽量使用”“来表示。在编程语言中表示的是文本数据类型。
Python字符串注意点
- 若字符串本身需要出现”或者‘应使用\来转义;
- 实际使用过程中,如果字符串本身需要出现“,则在字符串定义的时候使用’‘来包裹不需要使用\转义;
- 实际使用过程中,如果字符串本身需要出现’,则在字符串定义的时候使用”“来包裹不需要使用\转义;
- 字符串的索引从0开始,同样可以使用索引来获取某个具体的字符;
- 字符串同样可以使用for循环来遍历所有的字符
str1 = "hello'world"
str2 = 'hello"Python'
for c in str1:
print("str1 c:",c)
for c in str2:
print("str2 c:",c)
提一下
如果字符串本身既要有‘,又要用”,用“”或者’‘包裹都可以,但是“和’作为字符串本身值的部分需要转义。
str3 = "hello\' and world\""
print("str3:",str3) # str3: hello' and world"
str4 = 'hello\" and world\''
print("str4:",str4) # str4: hello" and world'
字符串同样可以使用三个单引号或者双引号来定义
str5 = """三个双引号定义的字符串"""
str6 = '''三个单引号定义的字符串'''
print("str5:%s str6:%s" % (str5,str6))
切片
取出字符串的一部分。
str1 = "helloPython"
# 格式 字符串[开始索引:结束索引],默认开始包含结束不包含
print("str1[0,5]:",str1[0:5])
# str1[0,5]: hello
如果截取到字符串最后一个字符,那么结束索引可以不写; 如果是用第一个索引开始,那么开始索引可以不写;
# 如果截取到字符串最后一个字符,那么结束索引可以不写;
# 如果是用第一个索引开始,那么开始索引可以不写;
print("str1[3:]",str1[3:]) # str1[3:] loPython
print("str1[:3]",str1[:3]) #str1[3:] loPython
print("str1[:]",str1[:]) # str1[:] helloPython
print("str1:",str1) # str1: helloPython
含步长的切片索引:
字符串[开始索引:结束索引:步长],将要取到的字符等于上一个字符索引加上步长。开始索引一定小于结束索引。
str1 = "helloPython"
# 字符串[开始索引:结束索引:步长],将要取到的字符等于上一个字符索引加上步长
print("str1[0::2]",str1[0::2]) # str1[0::2] hloyhn
灵活使用步长实现字符串反向输出
str1 = "helloPython"
print("str1[::-1]:",str1[::-1]) # str1[::-1]: nohtyPolleh
原因是因为:(1)步长为负数时,起始索引和结束索引颠倒位置。
(2)字符串的最后一个字符可以使用str[-1]获得。
判断
方法 | 说明 |
string.isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True |
string.isdecimal() | 如果 string 只包含数字则返回 True |
string.islower() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True |
string.isupper() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True |
string.startswith(str) | 检查字符串是否是以 str 开头,是则返回 True |
string.endswith(str) | 检查字符串是否是以 str 结束,是则返回 True |
查找和替换
方法 | 说明 |
string.find(str, start=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 |
string.rfind(str, start=0, end=len(string)) | 类似于 find(),不过是从右边开始查找 |
string.index(str, start=0, end=len(string)) | 跟 find() 方法类似,不过如果 str 不在 string 会报错 |
string.rindex(str, start=0, end=len(string)) | 类似于 index(),不过是从右边开始 |
string.replace(old_str, new_str, num=string.count(old)) | 返回一个新字符串,把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次 |
拆分和连接
方法 | 说明 |
string.partition(str) |
|
string.rpartition(str) | 类似于 partition() 方法,不过是从右边开始查找 |
string.split(str="", num) |
|
string.splitlines() | 返回列表,按照行('\r', '\n', '\r\n')分隔 |
string1 + string2 | 拼接两个字符串 |
string.join(seq) |
|
list = str1.split("3")
print(list) # ['12', '456654', '21']
list = str1.split("3",1)
print(list) # ['12', '456654321']
list = str1.split("9")
print(list) # ['123456654321']
str1 = "zhangsan@163.com"
tuple = str1.partition("@")
print(tuple) # ('zhangsan', '@', '163.com')
tuple = str1.partition("!")
print(tuple) # ('zhangsan@163.com', '', '')
tuple = str1.rpartition("@")
print(tuple) # ('zhangsan', '@', '163.com')
str1 = "123456654321"
list = ["hello","world"]
sep = "*"
str2 = sep.join(list)
print(str2) # hello*world
大小写转换
方法 | 说明 |
string.lower() | 返回新字符串,转换 string 中所有大写字符为小写 |
string.upper() | 返回新字符串,转换 string 中的小写字母为大写 |
文本对齐
方法 | 说明 |
string.ljust(width) | 返回新字符串,基于原字符串左对齐,并使用空格填充至长度 width |
string.rjust(width) | 返回新字符串,基于原字符串右对齐,并使用空格填充至长度 width |
string.center(width) | 返回新字符串,基于原字符串居中,并使用空格填充至长度 width |
str = "========"
print(str.ljust(20))
print(str.rjust(20))
print(str.center(20))
结果:
========
========
========
去除空白
str = " AAA BBB "
print(str)
print(str.lstrip())
print(str.rstrip())
print(str.strip())
AAA BBB
AAA BBB
AAA BBB
AAA BBB
编码问题
字符串的编码问题历史悠久,基本来说就是以大范围的字符集不断兼容小范围的字符集,比如从最初的ASCII到lain1,从gbk到gb2312,最后到UTF-8。具体的细节大家可以自行查阅。在python3中默认使用的UTF-8编码,同时和其他语言一样,如果没有以字符串原有编码方式查看文件就会造成乱码问题。
str1 = '你好,世界'
utf8_str1 = str1.encode('utf-8')
print('utf8_str1:%s type(utf8_str1):%s' % (utf8_str1,type(utf8_str1)))
gbk_str1 = str1.encode('gbk')
print('gbk_str1:%s type(gbk_str1):%s' % (gbk_str1,type(gbk_str1)))
#结果:
#utf8_str1:b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c' type(utf8_str1):<class 'bytes'>
#gbk_str1:b'\xc4\xe3\xba\xc3\xa3\xac\xca\xc0\xbd\xe7' type(gbk_str1):<class 'bytes'>
str1_to_utf8 = utf8_str1.decode('utf-8')
str1_to_gbk = gbk_str1.decode('gbk')
print('str1_to_utf8:%s' % str1_to_utf8)
print('str1_to_gbk:%s' % str1_to_gbk)
#结果
#str1_to_utf8:你好,世界
#str1_to_gbk:你好,世界
format
在开发中总是与字符串打交道,format是一个很好的打印字符串的方法。
name = 'zhangsan'
age = 10
addr = 'beijing'
info_list = ['zhangsan',10,'beijing']
info_dict = {'name':'zhangsan','age':10,'addr':'beijing'}
str1 = '姓名是{},年龄是{},地址是{}'.format(name,age,addr)
str2 = '姓名是{0},年龄是{2},地址是{1}'.format(name,addr,age)
str3 = '姓名是{},年龄是{},地址是{}'.format(*info_list)
str4 = '姓名是{name},年龄是{age},地址是{addr}'.format(**info_dict)
print('str1:%s' % str1)
print('str2:%s' % str2)
print('str3:%s' % str3)
print('str4:%s' % str4)
#结果:
#str1:姓名是zhangsan,年龄是10,地址是beijing
#str2:姓名是zhangsan,年龄是10,地址是beijing
#str3:姓名是zhangsan,年龄是10,地址是beijing
#str4:姓名是zhangsan,年龄是10,地址是beijing