Python字符串(String)与格式化输出及字符串的常用函数

本文深入讲解了Python中字符串的创建、运算、格式化输出及常用函数,包括字符串连接、重复输出、字符访问、截取、格式化、常用函数如eval、str、len等,以及字符串的大小写转换、填充、分割、替换、判断等操作。
摘要由CSDN通过智能技术生成

String字符串与格式化输出及字符串的常用函数

一、String字符串
1.什么是字符串

字符串是以单引号或者双引号括起来的任意文本,一个字符串由若干个任意字符组成

2.创建字符串
str1 = "hello world"
str2 = 'you are good'
3.字符串运算
3.1字符串链接

3.1.1 使用加号("+")进行链接

#str3 = str1+str2

>>s1 = 'welcome'
>>s2 = 'to guangzhou'
>>print(s1 + s2)
welcometo guangzhou

特点:输出之后,连接的字符串之间没有空格

注意:不同类型的不能相加,如字符串 + 数字,这样会报错

3.1.2 使用“,”进行链接【tuple类型】

#print(str1,str2)

>>s1 = 'hello'
>>s2 = 'world'
>>print(s1, s2)
welcome to guangzhou

特点:使用“,”链接的时候,在“,”的位置会产生一个空格

3.1.3 使用%格式化链接

#print("%s%s"%(str1,str2))

>>s1 = 'hello'
>>s2 = 'world'
>>print("%s %s"%(s1, s2))
hello world

特点:仅在%s对应的位置插入连接的字符串,原有print的其他内容不变,可选取多个点位,连接时按照%后面元组的元素顺序进行对应插入

3.1.4 使用join函数进行链接

#"X".join(序列)

>>s1 = ['hello', 'world']
>>print("".join(s1))
>>print("*".join(s1))
helloworld
hello*world

特点:“x”:里面的X可以空格,也可以是*等符号内容,还可以是字符串等

注意:1)"".join()函数内部只需要传递一个参数;2)序列中的元素必须是字符串。

3.1.5 使用“{},{}”.format()来进行链接

s1 = 'hello'
s2 = 'world'
print("{} {}".format(s1,s2))

特点:类似于3.1.3

3.2 重复输出字符串
#重复输出字符串,通过乘法的方式实现
>>s3 = 'good'
>>print(s3 * 3)
goodgoodgood

输出无空格
3.3 获取字符串中的字符
#通过索引的方式实现
#索引:给一个字符串中的字符从0开始编号,也称为下标
#索引的取值范围:[0,str.length-1]
#访问方式: 变量名称[索引]
str3 = 'good'
print(str3[0])
#索引值还可以从-1开始,-1代表倒数第一个字符
print(str3[-1])
3.4 截取字符串
#注意:截取字符串的范围是str[start : stop:step] 它是一个前闭后开的区间[start,end),以step为步长。
#参数一:从start开始取 默认0
#参数二:到stop结束, stop取不到,默认len(str1)
#参数三:步长  默认1 可以为负,此时截取的方向相反
#如果n的值超过了字符串的最大长度,则仍然截取原下标的长度

>>str1 = "hello world"
# 通过下标截取字符串
>>print(str1[3:6])
lo w

#从开头截取到指定索引之前[0,5)
>>print(str1[:5])
hello

#从指定截取到结尾[4,str1.length)
>>print(str1[4:])
 world#注意空格也占位输出
    
#从[0,3)中,以步长为2进行截取
>>print(str1[0:3:2])
hl

#从[0,3)索引范围内,截取一个步长为-1的字符串
>>print(str1[:3:-1])
dlrow o

#从索引3到结尾的范围内,截取一个步长为-1的字符串
>>print(str1[3::-1])
lleh

#在整个字符串范围内,以-1为步长,可将字符串倒置输出
>>print(str1[::-1])
dlrow olleh
3.5 判断是否包含指定字符
#判断字符串中是否包含某指定字符串(指定字符串需是连续出现的,如yar是不行的,也可以是单个字母。)
str4 = "you are a good boy"
print("good" in str4)
#若包含有则返回True否则为False
3.6 格式化输出
#通过%来改变后面的字母或者是符号的含义,%被称为占位符
# %s:打印字符串
>>print ("His name is %s"%("Aviad"))
His name is Aviad

# %d:打印整数
>>print ("He is %d years old"%(25))
He is 25 years old

# %f:打印浮点数,可指定小数点后的精度
>>print ("His height is %f m"%(1.83))
His height is 1.830000 m


# %.2打印浮点数(指定保留小数点位数)%.nf保留n位小数;n=0,不保留小数
>>print ("His height is %.2f m"%(1.83))
His height is 1.83 m

#指定占位符宽度(右对齐)%nx (x为类型),输出长度为n的类型,n包含字符串本身长度在内
#对int、float类型,%0nd/%0nf表示输出长度为n的类型,不够时使用0补齐(对%-nx不适用)
>>print ("Name:%10s Age:%8d Height:%8.2f"%("Aviad",25,1.83))
Name:     Aviad Age:      25 Height:    1.83
>>print ("Name:%10s Age:%08d Height:%08.2f"%("Aviad",25,1.83))
Name:     Aviad Age:00000025 Height:00001.83


#指定占位符宽度(左对齐)%-nx(x为类型),输出长度为n的类型,n包含字符串本身长度在内
>>print ("Name:%-10s Age:%-8d Height:%-8.2f"%("Aviad",25,1.83))



#指定占位符(只能用0当占位符)
>>print ("Name:%-10s Age:%08d Height:%08.2f"%("Aviad",25,1.83))



age = 18
name = "丽丽"
weight = 45.5
print("my name is %s , I am %d year old and my weight is %.2f kg"%(name, age, weight))
#注意:%.nf表示精确到小数点后n位,会四舍五入
4.关于字符串常用函数
4.1 eval(str)

功能:将字符串str当成有效的表达式来求值并返回计算结果。

可以把list,tuple,dict, set和string相互转化

>>>num1 = eval('123')
>>>print(num1)
123

>>>num2 = eval("[1, 2, 3]")
>>>print(num2)
[1, 2, 3]

>>> num3 = eval("12-3")
>>> print(num3)
9
4.2 str(x)

功能:可以将x【number,bool,list,tuple,set,dict】转为字符串

>>list2 = ["hello","good"]
>>str2 = str(list2)
>>print(str2)
>>print(type(str2))
['hello', 'good']
<class 'str'>
4.3 len(str)

功能:返回当前字符串的长度(字符的个数,含空格)

>>> len("you are good")
12
4.4 str.lower()

功能:返回一个把字符串中的大写字母转换为小写字母 的字符串

>>> str = "Hello World"
>>> print(str.lower())
hello world

注意:此方法不改变原本的字符,返回一个新的字符串

4.5 str.upper()

功能:返回一个把字符串中的小写字母转换为大写字母的字符串

>>> str = "Hello World"
>>> print(str.upper())
HELLO WORLD
4.6 str.swapcase()

功能:返回一个把字符串中的大写字母转为小写字母,小写字母转换为大写字母的字符串

>>> str = "Hello World"
>>> print(str.swapcase())
hELLO wORLD
4.7 str.capitalize()

返回一个首字母大写,其他小写的字符串

>>> str = "Hello World"
>>> print(str.capitalize())
Hello world
4.8 str.title()

返回一个每个单词首字母大写的字符串(标题化的字符串),其他字母小写。

>>> str = "Hello World"
>>> print(str.title())
Hello World
4.9 str.center(width[, fillchar])

功能:返回一个指定宽度的居中字符串,fillchar为填充的字符,默认使用空格(指定填充字符时,fillchar长度只能为1)

>>> str = "Hello World"
>>> print(str.center(50,"*"))
*******************Hello World********************
4.10 str.ljust(width[, fillchar])

功能:返回一个指定宽度的左对齐字符串,fillchar为填充字符。默认使用空格填充

>>> str = "Hello World"
>>> print(str.ljust(50,"*"))
Hello World***************************************
4.11 str.rjust(width[, fillchar])

功能:返回一个指定宽度右对齐字符串,fillchar为填充字符,默认使用空格填充

>>> str = "Hello World"
>>> print(str.rjust(50,"*"))
***************************************Hello World
4.12 str.zfill(width)

功能:返回一个长度为width字符串,原字符串右对齐,前面补0

>>> str = "Hello World"
>>> print(str.zfill(50))
000000000000000000000000000000000000000Hello World
4.13 str.count(str 【,start】【, end】)

功能:返回字符串中str出现的次数,可以指定一个范围,若不指定则默认从头到尾,匹配的时候是区分大小写的。

>>> str1 = "Hello World"
>>> print(str1.count("hello", 0 , 10))
0

注意:end不被取到,前闭后开的区间[start,end)

4.14 str.find(str1【, start】【, end】)

功能:从左到右检测str1字符串是否包含在字符串中,可以指定范围[start,end)左闭右开,默认从头到尾。

返回的是第一次出现的开始的下标,若未查询到,则返回-1

>>> str = "Hello World"
>>> str1 = "llo"
>>> print(str.find(str1, 0 , 10))
2
4.15 str.rfind(str1【, start】【, end】)

功能:类似于str.find(),不过是从右边开始查找

>>> str = "Hello World"
>>> str1 = "llo"
>>> print(str.rfind(str1, 0 , 10))
2
4.16 str.index(str1[, start = 0] ,[ end = len(str)])

功能:类似于find(),与find() 不同的是,如果str1不存在的时候会报一个异常

从左往右在str中查找str1是否存在,若存在则返回第一匹配到的下标值,不存在则报错

>>> str2 = "Hello World"
>>> str1 = "hello"
>>> str3 = "Hello"
>>> print(str2.index(str3,0,12))
>>> print(str2.index(str1, 0 , 10))
0
ValueError: substring not found
4.17 str.rindex(str1[, start = 0] ,[ end = len(str)])

从右往左在str中查找str1是否存在,若存在则返回第一匹配到的下标值,不存在则报错

>>str1 = "******today is a nice day,today is a good day,today is a nice day*******"
>>print(str1.index("nice"))
>>print(str1.rfind("nice"))
17
57
4.18 str.lstrip(chars)

功能:截掉字符串左侧指定的字符串chars,若chars不给,则默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')

>>> str = '**** you are very good'
>>> print(str.lstrip())
>>> print(str.lstrip())
**** you are very good
>>> print(str.lstrip("*"))
 you are very good
4.19 str.rstrip(chars)

功能:截掉字符串右侧指定的字符串chars,若chars不给,则默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')

>>> str = '**** you are good****'
>>> print(str.rstrip())
**** you are good****
>>> print(str.rstrip("*"))
**** you are good
4.20 str.strip()

功能:截掉字符串左右两侧指定的字符串chars,若chars不给,则默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')

>>> str1 = "      hello world     "
>>> str1.strip()
'hello world'
4.21 string.split(str, num)

功能:以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串

str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等(也可选取字符串中包含的字符)。

num – 分割次数,默认为str.count

>>> str1 = "hello you are good"
>>> str1.split()
['hello', 'you', 'are', 'good']
>>> str1.split(" ",2)
['hello', 'you', 'are good ']

str1.split(seq, maxsplit)

功能:从左往右使用指定的seq对str1进行切割处理,若不指定seq,则默认使用空白符来进行切分,若不指定maxsplit默认全部切分,切分结果以列表形式返回。

4.22 str1.rsplit(seq, maxsplit)

功能:从右往左使用指定的seq对str1进行切割处理,若不指定seq,则默认使用空白符来进行切分,若不指定maxsplit默认全部切分,切分结果以列表形式返回。

4.23 str1.splitlines([keepends])

功能:字符串会按照行(’\r’,’\r\n’,’\n’)进行分割,返回一个包含各行作为元素的列表,如果参数keepends的值为False,不包含换行符,如果为True,则保留换行符。

str2 = '''how are
you ?
i am
fine
!
'''

list2 = str2.splitlines()
print(list2)
#结果
['how are', 'you ?', 'i am', 'fine', '!']
str2 = '''how are
you ?
i am
fine
!
'''

list2 = str2.splitlines(keepends=True)
print(list2)
#结果
['how are\n', 'you ?\n', 'i am\n', 'fine\n', '!\n']
4.24 str1.join(seq)

功能:以指定字符串作为分隔符,将seq中的所有元素合并成为一个新的字符串

list2 = ['you', 'are', 'very', 'great', '!']
str3 = ' '.join(list2)
print(str3)
#结果
you are very great !
str1 = "how are you , i am fine thank you"
str3 = "*".join(str1)
print(str3)
#结果
h*o*w* *a*r*e* *y*o*u* *,* *i* *a*m* *f*i*n*e* *t*h*a*n*k* *y*o*u

注意:如果连接的是字符串,则它会把字符串中的每个字符使用指定字符连接。

4.25 获取最大最小字符

1. max(str)

功能: 返回字符串str中最大的字母

str1 = "how are you , i am fine thank you"
print(max(str1))
#结果
y

2. min(str)

功能:返回字符串str中最小字母

str1 = "how are you , i am fine thank you"
print(min(str1))
#结果
‘ ’

注意:比较的是ASCII码值

4.26 字符串的替换

1. replace(old , new [, count])

参数一:被替换的字符串
参数二:新的字符串
参数三:替换的次数,若不指定默认全部替换

功能:将字符串中的old替换成new,若不指定count,则默认全部替换,若指定count,则替换前count个

str1 = "how are you , i am fine thank you"
str2 = str1.replace("you" ,'me')
print(str2)
#结果
how are me , i am fine thank me

2. 字符串映射替换

参数一:要转换的字符 参数二:目标字符

dic = str.maketrans(oldstr, newstr)

str2.translate(dic)

str5 = "aaa bbb  ccc  deee"
dic = str5.maketrans("ac", "21")
# a--2   c--1
str7 = "how  are you  ,u ewe "
print(str7.translate(dic))
#结果
how  2re you  ,u ewe 
#注意:很少用
4.27 判断字符串的开头结尾

str.startswith(str1, start=0, end=len(str))

功能:在给定的范围内[start,end)判断字符串是否以给定的字符串开头,如果没有指定范围,默认整个字符串

str1 = "aaa bbb  ccc  deee"
print(str1.startswith("aa"))
#结果
True

str1 = "aaa bbb  ccc  deee"
print(str1.startswith("aa", 3, 9))
#结果
False

str.endswith(str, start=0, end=len(str))

功能:在给定的范围内[start,end)判断字符串是否以指定的字符串结尾,若没有指定范围,默认为整个字符串

str1 = "aaa bbb  ccc  deee"
print(str1.endswith("e"))
#结果
True

str1 = "aaa bbb  ccc  deee"
print(str1.endswith("e", 3 ,9))
#结果
False

注意:空格也产生占位,判断的时候也参与

4.28 编码与解码

str.encode(encoding=“utf-8”, errors=“scrict”)

功能:字符串的编码,将普通字符串转为二进制,若不指定encoding则默认选择utf-8

str1 = "你好吗?"
data = str1.encode()
print(data)
print(type(data))
#结果
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x90\x97\xef\xbc\x9f'
<class 'bytes'>

str.decode(encoding=“utf-8”)

"hello".encode(“utf-8”).decode()

功能:对字符进行解码,将二进制字符串转为普通字符串,若不指定编码格式,则默认选择utf-8

str1 = "你好吗?"
data = str1.encode()
print(data)
print(type(data))

data2 = data.decode()
print(data2)
print(type(data2))

#结果
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x90\x97\xef\xbc\x9f'
<class 'bytes'>
你好吗?
<class 'str'>

注意:解码时的编码格式要与编码时的保持一致

拓展:errors = ignore 的时候,忽略错误

4.29 判断是否为字母或数字

str.isalpha()

功能:判断字符串至少有一个字符,并且所有的字符都是字母,若为真则返回True,否则返回False

注意:此功能没有考虑中文,默认中文也是字母。不得含有空格

*辅助记忆:alpha /'ælfə/:希腊字母的第一个字母α

str8 = "hello ni hao "
print(str8.isalpha())
#结果
False

str9 = "hellonihao"
print(str9.isalpha())
#结果
True

str.isalnum()

功能:判断一个字符串至少有一个字符,并且所有的字符都是字母或数字则返回True否则返回False

注意:此功能没有考虑中文,默认中文也是字母。不得含有空格

*辅助记忆:alpha /'ælfə/:希腊字母的第一个字母α

num:number数字

alnum = al + num

str1 = "sc22xdcd"
str2 = "hello中国"
str3 = "HELLO I"
print(str1.isalnum())
print(str1.isalpha())
print(str2.isalnum())
print(str2.isalpha())
print(str3.isalnum())
print(str3.isalpha())
#结果
True
False
True
True
False
False
4.30 判断大小写

str.isupper()

功能:若字符串中包含至少一个字母的字符,并且这些字母都是大写,则返回True,否则返回False。(判断包含的字母是否全大写,含有空格、中文等不影响判断结果)

str10 = "AA2221  111"
print(str10.isupper())
#结果
True

str10 = "AAaaa"
print(str10.isupper())
#结果
False

str.islower()

功能:若字符串中包含至少一个字母的字符,并且这所有的字母都是小写,则返回True,否则返回False。(判断包含的字母是否全大写,含有空格、中文等不影响判断结果)

str10 = "aa2221  111"
print(str10.islower())
#结果
True
4.31 判断是否为标题化字符串

str.istitle()

功能:如果一个字符串是标题化的则返回True,否则返回False

【标题化】每个首字母大写

str1 = "Hello World"
print(str1.istitle())
4.32 判断是否全部为数字

str.isdigit():只能识别阿拉伯数字

isdigit()
True: Unicode数字,byte数字(单字节),全角数字(双字节)
False: 汉字数字 ,罗马数字
Error:
str1 = "1111"
str2 = "一二三"
str3 = "壹贰叁"
str4 = "I"
print(str1.isdigit())
print(str2.isdigit())
print(str3.isdigit())
print(str4.isdigit())
#结果
True
False
False
False

str.isnumeric():除了阿拉伯数字,还可以识别中文的一二三、壹贰叁。

功能:若字符串中只包含数字字符,则返回True,否则返回False

isnumeric()
True: Unicode数字,全角数字(双字节),汉字数字
False: 罗马数字,
Error: byte数字(单字节)
str1 = "1111"
str2 = "一二三"
str3 = "壹贰叁"
str4 = "I"
print(str1.isdigit())
print(str2.isdigit())
print(str3.isdigit())
print(str4.isdigit())
#结果
True
True
True
False

str.isdecimal():只能识别阿拉伯数字

功能:检查字符串是否只包含十进制字符【0,9】,如果是返回True,否则返回False

isdecimal()
True: Unicode数字,,全角数字(双字节),
False: 罗马数字,汉字数字
Error: byte数字(单字节)
str1 = "1111"
str2 = "一二三"
str3 = "壹贰叁"
str4 = "I"
print(str1.isdigit())
print(str2.isdigit())
print(str3.isdigit())
print(str4.isdigit())
#结果
True
False
False
False
4.33 判断是否只包含空白符

str.isspace()

功能:如果字符串只包含空白符,则返回True,否则返回False

注意:不得为空串

print(" ".isspace())
print("\t".isspace())
print("\n".isspace())
print("\r".isspace())
print("  qq".isspace())
print("".isspace())

#结果
True
True
True
True
False
False
4.34 ASCII码转换
  1. ord(str)

功能:获取字符表示 ASCII码值

print(ord("A"))
print(ord("你"))
#结果
65
20320
  1. chr(str)

把编码转成对应的字符

print(chr(68))
print(chr(20190))
#结果
D
仞
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值