Python:字符串 解码与编码
解码编码:a bytes-like object is required,not 'str'
1、字符串运算符
运算符 | 描述 | 例子 |
+ | 字符串连接 | |
* | 重复输出字符串 |
'Hello'*3 'HelloHelloHello' |
in | 如果字符串中包含给定字符就返回True |
'o' in 'Hello' True 'lo' in 'Hello' True 't' not in 'Hello' True |
not in | 与in相反 | |
r/R前缀 | 标识该字符串中不存在转义字符,所有字符都直接按照字面意思使用 |
r'D:\Python' #等价于 'D:\\Python' |
% | 格式化字符串 | Python:格式化字符串的几种方式 - ShineLe - 博客园 |
2、三引号——跨行字符串
如果字符串太长需要跨行输入而又不想多写语句时,可以用三引号'''
hi='''ni hao''' hi 'ni\nhao'
这种写法的一个典型用例是,当需要一块HTML或者SQL时,应当使用三引号标记,因为使用传统的转义字符体系将会十分复杂
errHTML = ''' <HTML><HEAD><TITLE> Friends CGI Demo</TITLE></HEAD> <BODY><H3>ERROR</H3> <B>%s</B><P> <FORM><INPUT TYPE=button VALUE=Back ONCLICK="window.history.back()"></FORM> </BODY></HTML> ''' cursor.execute(''' CREATE TABLE users ( login VARCHAR(8), uid INTEGER, prid INTEGER) ''')
3、Unicode字符串
定义方法:加u前缀
4、函数及用法
①类型检测
if not isinstance(S,str) :#str即为字符串类型 raise TypeError('Error input type')
②函数
方法 | 说明 | 返回值 |
string.capitalize() | 字符串首字母大写 | 新字符串 |
string.ljust(width) | 将原字符串左对齐,并在右侧用空格填充至长度width | 新字符串 |
string.zfill(width) | 将原字符串右对齐,并在左侧用0填充至长度width | 新字符串 |
string.center(width) | 将字符串居中,并使用空格左右填充至指定的width宽度 | 新字符串 |
string.count(str , beg=0 , end=len(string)) | 统计str在string中出现的次数,指定beg和end将会在指定范围内统计 | str出现的次数 |
string.decode( encoding='utf-8' , error='strict') | 以encoding指定的编码格式解码string,如果出错则报ValueError异常,除非errors为'ignore'或'replace' | 解码后的字符串 |
string.encode(encoding='utf-8',errors='strict') | 编码,其他与decode相同 | 编码后的字符串 |
string.endswith(obj , beg=0, end=len(string)) | 检查字符串是否以obj结束,设定beg与end将会指定在特定范围内检查(文档筛选时很有用) |
是:TRUE 否:False |
string.startswith(obj , beg=0 , end=len(string)) | 检查字符串是否以obj开头,设定beg与end将会指定在特定范围内检查(文档筛选时很有用) |
是:TRUE 否:False |
string.expandtabs(tabsize=8) | 将字符串string中的tab符号转化为空格,参数tabsize指定每个tab转化的空格数,默认是每个tab转化8个空格 | 新字符串 |
string.find(str , beg=0 , end=len(string)) | 检测str是否包含在string中,beg与end指定检查范围。与in运算符的区别在于返回值 |
返回第一次出现时索引值;否则返回-1 |
string.rfind(str , beg=0 , end=len(string)) | 类似于find(),区别在于从右开始 | 同上 |
str.index(str , beg=0 , end=len(string)) | 同find(),区别在于如果不存在str会报一个异常 | 同上,失败返回异常 |
str.rindex(str , beg=0 , end=len(string)) | 类似index(),区别在于从右开始 | 同上,失败返回异常 |
string.isalnum() | 如果string的所有字符都是字母或者数字就返回True,否则False |
True与False |
string.isalpha() | 如果string的所有字符都是字母则返回True,否则False | |
string.isdecimal() | 如果string只包含十进制数字就返回True,否则False(字符串转数字时的检查工作) | |
string.isdigit() | 如果string只包含数字就返回True,否则False | |
string.islower() | 如果string中的字符都是小写(只看能区分大小写的字符),返回True,否则False(大小写检查) | |
string.isupper() | 与上边相反 | |
string.isnumeric() | 如果string只包含数字字符,返回True,否则False | |
string.isspace() | 如果string中只包含空格,返回True,否则False | |
string.istitle() | 如果string是标题化的(见title()),返回True,否则返回False | |
string.join(seq) | 以string为连接符,将seq中的所有元素合并为一个新的字符串(如果string为'',则能起到无缝连接) | 新字符串 |
string.lower() | 将string中的所有字符小写化 | 新字符串 |
string.upper() | 所有字符大写化 | 新字符串 |
string.lstrip() | 去掉string左边的空格 | 新字符串 |
string.rstrip() | 去掉string右边的空格 | 新字符串 |
string.strip( [chars] ) | 同时执行lstrip()与rstrip()(读文件时用readlines读进来的数据会包含换行符'\n',需要用strip()消去) | 新字符串 |
max(str) | 返回str中的最大字母 | 字符 |
min(str) | 返回最小字母 | 字符 |
string.partition(str) | 找到str出现的第一个位置,将string分为一个三元素元组(pre,str,post),如果string中不包含str,则pre==string,str和post都为空(用法不如split普遍) |
成功:三元素元组(pre,str,post); 失败:(string , '' , '' ) |
string.rpartition(str) | 类似partition(),区别在于从右开始 | 同上 |
string.replace(str1 , str2 , num=string.count(str1)) | 把string中的str1替换为str2,次数不超过num次 | 新字符串 |
string.split(str='' , maxsplit=string.count(str)) | 以str(默认为空格)为分隔符对string进行切割,如果num指定,则仅分隔num个字符串 | 切割后各段子串构成的list,其中不包含分隔符str |
string.splitlines( [keepends] ) | 按照行('\r' , '\r\n' , '\n')分隔,返回一个包含各行作为元素的List;如果keepends为False,则不包含换行符;如果为True,则包含。这里的包含是指,结果中是否包含换行符 | 各行作为元素的list |
string.swapcase() | 翻转string中的大小写 | 新字符串 |
string.title() | 将string进行“标题化”,标题化:所有单词都以大写开始,其余字母都为小写 | 新字符串 |
string.translate(str) | 根据str给出的表转换string中的字符 | 转换后的字符串 |
③部分函数的具体用法
a、指定连接字符的连接——join
将List序列中的元素以指定的字符连接成一个新的字符串。
str.join(Seq)
str:连接字符
Sequence:字符串序列,注意是序列,需要用[],()
str='-' Seq=['a','b','c'] print(str.join(Seq)) a-b-c
当str为空字符串''时,作用就是把字符串序列中的元素直接连接起来
str='' Seq=['a','b','c'] print(str.join(Seq)) abc
字符串拼接——+
b'123'+b'='
b'123='
'123'+'456'
'123456'
b、字符串分割——split
将字符串中的元素以指定的字符为标识为界分割成几段字符串,并保存在一个字符串序列中
str.split(str="", maxsplit=string.count(str)).
str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
maxsplot-- 分割次数。默认为 -1, 即分隔所有。
str2='123.456' S=str2.split('.') print(S) ['123', '456']
c、查找指定字符——find
返回下标,失败返回-1
判断字符串str中是否有子串substr的两种方法:
#1 if substr in str: print(True) #2 if str.find(substr) !=-1 print(True)
利用正则,查找字符串中第一个中文字符的起始位置(此时不用find):
学习自:python 找到字符串第一个中文字符的位置_mob649e816704bc的技术博客_51CTO博客
import re pattern=re.compile(r'[^\u0000-\u007f]') match=pattern.serch(fn)
d、移除首尾字符——strip
移除字符串首尾指定的字符或字符序列,中间的字符无法移除
用法:str.strip( [chars] )
chars为指定要移除的字符序列,缺省时为空格或换行符'/n'
这里用字符序列而不是字符串的原因,只要包含在字符序列中的字符都会被删除,而不要顺序正确,见第三个例子
'00001230456000'.strip('0') '1230456' ' He ll o '.strip() 'He ll o' #字符序列而非字符串 '1234321'.strip('12') '343'
e、替换——replace()
用法:str.replace(old , new [, max ] )
用途:把字符串中的old子串替换为new子串,如果指定第三个参数max,则替换不超过max次
返回:替换后的新串
str='This is string example... wow!!!this is really string' print(str.replace('is','was')) print(str.replace('is','was',3)) Thwas was string example... wow!!!thwas was really string Thwas was string example... wow!!!thwas is really string
f、用转换表转化字符串——translate()
用法:str.translate(table)
用途:根据table给出的表转换字符串str的字符;
参数:
table:翻译表,由maketrans方法转换而来
返回:转换后的新字符串
intab = 'aeiou' outtab = '12345' trantab = str.maketrans(intab , outtab) #这三句之后,转换表trantab就有了转化方式——a转1,e转2,... str = 'this is an example ...' print( str.translate(trantab))
注意:
不能from string import maketrans,否则会报错,原因未知。
可以直接用str.maketrans(),str是个类名
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性