Python 字符串
Python字符串介绍
在Python中,字符串属于不可变有序序列
,使用单引号,双引号,三单引号或三双引号作为定界符,并且不同的定界符之间可以互相嵌套。
‘abc’, ‘123’ ,‘中国’
“python”
‘’’ yjy said,"Let’s go !!! " ‘’’
除了支持序列通用方法(包括双向索引,比较大小,计算长度,元素访问,切片,成员测试等操作)以外,字符串类型还支持一些特有的操作方法,例如字符串格式化,查找,替换,排版等等。
字符串属于不可变
序列,不能
直接对字符串对象进行元素增加,修改与删除等操作,切片操作也只能访问其中的元素而无法使用切片来修改字符串中的字符。
除了支持Unicode编码的str类型之外,Python还支持字节串类型bytes,str类型字符串可以通过encode()
方法使用指定的字符串编码格式成为bytes对象,而bytes对象则可以通过decode()
方法指定编码格式解码成为str字符串。
字符串编码格式简介
最早的字符串编码是美国标准信息交换码ASCII,仅对10个数字,26个大写字母,26个小写字母以及一些其他符号进行了编码。ASCII码采用1个字节
来对字符进行编码,最多只能表示256个字符。
Unicode
把所有语言都统一到了一套编码中,这样就不会有乱码问题了。ASCII
编码是1个字节,Unicode
编码通常是2个字节
Python的字符串使用Unicode编码
Unicode编码兼容ASCII码,支持世界上各种语法文本
Python提供函数ord返回字符的编码,chr返回编码所代表的字符。
无论一个数字,英文字母还是一个汉字,在统计字符串长度的时候都是按照一个字符对待和处理
s = "中华美景"
print(len(s)) # 5
s = "中华美景AWESOME"
print(len(s)) #11
print(ord('A')) #65
print(ord('中')) # 20013
print(chr(65)) # 'A'
print(chr(20013))# '中'
utf-8 “可变长编码”
- utf-8可以看作是unicode的一个扩展集,把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8就能节省空间。
- UTF-8编码:把Unicide编码转化为“可变长编码”的UTF-8编码
Python3.x完全支持中文字符,默认使用UTF8编码格式,无论是一个数字,英文字母还是一个汉字,在统计字符串长度的时候都按一个字符对待和处理
在windows终端编码为gbk,linux是UTF-8
转义字符与原始字符串
为了避免对字符串中的转义字符进行转义,可以使用原始字符串,在字符串面前加上字母r或R表示原始字符串,其中的所有字符都表示原始的含义而不会进行任何转义。
path = 'C:\windows\notepad.exe'
print(path)
⇒ C:windows
otepad.ext
# 原因字符\n被转义为换行符
path = r'C:\windows\notepad.exe' # 原始字符串,任何字符都不转义
print(path)
⇒ C:\wondows\notepad.exe
字符串格式化
使用 % 运算符进行格式化
使用format方法进行格式化
格式化的字符串常量
使用 % 运算符进行格式化
字符串类型的格式化
格式化是对字符串进行格式表达的方式
- 字符串格式化使用.format()方法,用法如下:
- <模板字符串>.format(<逗号分隔的参数>)
print("{0:=^20}".format("Python"))
# =======Python=======
print("{0:*>20}".format("BIT"))
# *****************BIT
print("{:10}".format("BIT"))
# BIT
print("{0:,.2f}".format(12345.6789)) # 12,345.68 ,是千分位隔位
字符串常用操作
- find()和rfind方法分别来查找一个字符串在另一个字符串指定范围(默认是整个字符串)中首次和最后一次出现的位置,如果不存在
则返回-1
- index()和rindex()方法用来返回一个字符串在另一个字符串指定范围中首次和最后一次出现的位置,如果不存在
则抛出异常
- count()方法用来会犯一个字符串在当前字符串中出现的次数
s = "apple,peach,banana,peach,pear"
print(s.find("peach"))
print(s.find("peach",7))
print(s.find("peach",7,20))
print(s.rfind('p'))
print(s.index('p'))
print(s.index('pe'))
print(s.index('pear'))
'''
6
19
-1
25
1
6
25
'''
print(s.index('ppp')) # 报错
print(s.count('p')) # 5
print(s.count('pp'))#1
print(s.count('ppp'))#0
split(),rsplit(),partition(),rpartition()
- split()和rsplit()方法分别用来以指定字符位分割符,把当前字符串从左往右或从右往左分割成多个字符串,并返回包含分隔结果的列表;
- partition()和rpartition()用来以指定字符串为分隔符将原字符串分隔为3部分,即分隔前的字符串,分隔符字符串,分隔符后的字符串,如果指定的分隔符不再原字符串中,则返回原字符串和两个空字符串.
s = "apple,peach,banana,pear"
print(s.split(",")) # ['apple', 'peach', 'banana', 'pear']
print(s.partition(',')) # 分隔符 ('apple', ',', 'peach,banana,pear')
print(s.rpartition(',')) # ('apple,peach,banana', ',', 'pear')
print(s.rpartition('banana')) # ('apple,peach,', 'banana', ',pear')
s = "2024-11-14"
t = s.split("-")
print(t) # ['2024', '11', '14']
print(list(map(int,t))) # [2024, 11, 14]
split()方法语法
str.split(sep,maxsplit)
str: 表示要进行分割的字符串
sep: 用于指定分隔符,可以包含多个字符,此参数默认为None,表示所有空字符,包括空格,换行符"\n",制表符"\t"等
maxsplit: 可选参数,用于指定分割的次数,最后列表中的子串的个数最多为maxsplit+1
如果不指定maxsplit 或者指定为-1 表示分割次数没有限制
s = ('\n\nhello\t\t world \n\n My name is Dong ')
print(s.split(None,1)) # ['hello', 'world \n\n My name is Dong ']
print(s.rsplit(None,2)) # ['\n\nhello\t\t world \n\n My name', 'is', 'Dong']
print(s.split(maxsplit=6)) # ['hello', 'world', 'My', 'name', 'is', 'Dong']
# 字符串连接join()
li = ["apple","peach","banana","pear"]
print(','.join(li)) # apple,peach,banana,pear
print('.'.join(li)) # apple.peach.banana.pear
print('::'.join(li)) # apple::peach::banana::pear
问题解决: 使用split()和join()方法删除字符串中多余的空白字符,连续多个空白字符只保留一个.
x = 'aaa bb c d e fff '
print(' '.join(x.split())) # aaa bb c d e fff
def equavient(s1,s2):
if s1 == s2:
return True
elif ' '.join(s1.split()) == ' '.join(s2.split()):
return True
elif ''.join(s1.split()) == ''.join(s2.split()):
return True
else:
return False
equavient('pip list','pip list') # True
- lower(),upper(),capitalize(),title(),swapcase()
s = 'What is Your Name?'
print(s.lower()) #what is your name? 返回小写字符串
print(s.upper()) # WHAT IS YOUR NAME? 返回大写字符串
print(s.capitalize()) # What is your name? # 字符串首字符大写
print(s.title()) # What Is Your Name? # 每个单词的首字母大写
print(s.swapcase()) # wHAT IS yOUR nAME? # 大小写互换
replace(),maketrans(),translate()
查找替换replace() 类似于Word中的"全部替换" 功能
s = "中国,中国"
print(s) # 中国,中国
s2 = s.replace("中国","中华人民共和国") #两个参数都作为一个整体
print(s2) # 中华人民共和国,中华人民共和国
- 问题解决:测试用户输入中是否有敏感词,如果有的话就把敏感词替换为3个星号
words = ('测试','非法','暴力','话')
text = '这句话里含有非法内容'
for word in words:
if word in text:
text = text.replace(word,'***')
print(text) # 这句***里含有***内容
字符串对象的maketrans()方法是用来生成字符映射表,而transklate()方法是用来根据映射表中定义的对应关系转换字符串并替换其中的字符,使用这两个方法可以同时处理多个字符
# 创建映射表,将字符"abcdef123" 一一 对应地转换为"uvwxyz@#$"
table = ''.maketrans('abcdef123','uvwxyz@#$')
s = "Python is a greate programming language.I like it!"
# 按照映射表进行替换
print(s.translate(table))
问题解决: 凯撒加密,每个字母替换为后面第k个
import string
def kaisa(s,k):
lower = string.ascii_lowercase
upper = string.ascii_uppercase
before =string.ascii_letters
after = lower[k:] + lower[:k] + upper[k:] + upper[:k]
table = ''.maketrans(before,after) # 创建映射表
return s.translate(table)
补充:
在Python中,空白字符(whitespace characters)是指那些在文本中用于分隔单词、行和其他元素的不可见字符。常见的空白字符包括但不限于以下几种:
空格(Space):
ASCII码为32。
示例:’ ‘。
制表符(Tab):
ASCII码为9。
示例:’\t’。
换行符(Newline):
ASCII码为10。
示例:‘\n’。
回车符(Carriage Return):
ASCII码为13。
示例:‘\r’。
垂直制表符(Vertical Tab):
ASCII码为11。
示例:‘\v’。
换页符(Form Feed):
ASCII码为12。
示例:‘\f’。
使用 str.isspace()
str.isspace() 方法可以用来判断一个字符串是否全部由空白字符组成。如果字符串中至少有一个非空白字符,则返回 False;否则返回 True。
strip(),rstrip(),lstrip()
s = ' abc '
print(s.strip())
print('\n\nhellow world \n\n'.strip()) # 删除空白字符
print("aaaassddf".strip("a")) #删除指定字符
print("aaassddf".strip("af"))
print("aaaassddfaaa".rstrip("a")) #删除字符串右端指定字符
print("aaaassddfaaa".lstrip("a")) #删除字符串左端指定字符
abc
hellow world
ssddf
ssdd
aaaassddf
ssddfaaa
这三个函数的参数指定的字符串并不作为一个整体对待,而是在原字符串的两侧,右侧,左侧删除参数字符串中所包含的所有字符,一层一层地从外往里扒
print("aabccddeeeffg".strip("af")) #字母f不在字符串两侧,所以不能删除 bccddeeeffg
print("aabbccddeeeffg".strip("gaf")) # bbccddeee
print("aabbccddeeeffg".strip("gaef")) # bbccdd
print("aabbccddeeeffg".strip("gbaef")) # ccdd
print("aabbccddeeeffg".strip("gbaefcd")) # ''
原文地址:https://blog.csdn.net/2301_79602614/article/details/143749272
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!