表示方法

用“”或者‘’包裹起来的一串字符,为了和其他语言保持一致,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 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1

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 分成一个 3 元素的元组 (str前面, str, str后面)。
  • 该元组有且只会有三个元素。
  • 如果无法拆分,字符串作为元组的第一个元素存入元组,元组的后两个元素为空白。

string.rpartition(str)

类似于 partition() 方法,不过是从右边开始查找

string.split(str="", num)

 

  • 返回列表,以 str 为分隔符拆分 string,如果 num 有指定值,则仅分隔 num + 1 个子字符串,str 默认包含 '\r', '\t', '\n' 和空格
  • 拆分字符不会出现在列表中
  • 若无法拆分,字符串作为列表中的一个元素返回。

string.splitlines()

返回列表,按照行('\r', '\n', '\r\n')分隔

string1 + string2

拼接两个字符串

string.join(seq)

 

  • 返回字符串,以 string 作为分隔符,将 seq 中所有的元素合并为一个新的字符串。
  • 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