容器型数据类型——字符串
文章目录
字符串的定义
注意!!!:字符串同元组一样只能进行读操作,不能进行写操作
在Python程序中,如果我们把单个或多个字符用单引号或者双引号包围起来,就可以表示一个字符串。字符串中的字符可以是特殊符号、英文字母、中文字符、日文的平假名或片假名、希腊字母、Emoji字符等。
字符串的运算
再次注意:字符串和元组一样也是不变的数据类型,只能读操作不能写操作
循环遍历字符串每个字符
a = 'hello world'
#获取字符串的长度(空格也算)
print(len(a))
#循环遍历字符串每个字符
for i in range(len(a)):#i表示下标
print(a)
for i in a: #i表示元素
print(i)
重复运算
a = 'hello world'
print(a * 5)
成员运算
a = 'hello world'
print('or' in a)
print('ko' in a)
比较运算
(比较字符串的内容)比的是字符编码的大小
a = 'hello world'
b = 'hello,world'
print(a == b)
print(a != b)
c = 'goodbye, world'
print(b>c)
d = 'hello, everybody'
print(b >=c)
print(ord('g'),ord('h'))
字符串的索引和切片
字符串的索引与切片与列表元组一样
a = 'hello, world'
print(a[0],a[-len(a)])
print(a[len(a) - 1],a[-1])
print(a[a], a[-7])
print(a[2:5])
print(a[1:10:2])
print(a[::-1])
字符串相关函数与操作
操作字符串大小写
-
upper()
全变大写 -
lower()
全变小写 -
capitalize()
首字母大写 -
title()
每个单词首字母大写a = 'hello, world123' print(a.upper()) #变全大写 print(a.lower()) #变全小写 print(a.capitalize()) #首字母大写 print(a.title()) #每个单词首字母大写 print(a) #可以看出前面操作对字符串没有改变
判断字符串性质
判断字符串的性质返回的都是布尔值
在以后的数据分析中我们查看数据的性质会用到此些函数
-
isdigit()
判断字符串是不是数字 -
isalpha()
判断字符串是不是字母 -
isalnum()
判断字符串是不是字母和数字 -
isascii()
判断字符串是不是ASCII码 (python3.0以后才有此函数)b = 'abc123' print(b.isdigit())#判断字符串是不是数字 print(b.isalpha())#判断字符串是不是字母 print(b.isalnum())#判断字符串是不是字母和数字 print(b.isascii())#判断字符串是不是ASCII码 python 3.7 以上版本
-
startswith()
判断字符串是否以指定内容开头 -
endswith()
判断字符串是否以指定内容结尾c = '你好呀' print(c.startswith('你好'))#判断字符串是否以指定内容开头 print(c.endswith('啊'))#判断字符串是否以指定内容结尾
查找有没有子串
-
index()
/rindex()
从左开始查找 / 从右开始查找 -
find()
/rfind()
同上a = 'hO apple, i love apple.' #index --> 从左向右寻找指定的字串,可以指定从哪开始找,默认是0 #找到了返回字串对应的索引(下标),找不到直接报错(程序崩溃) print(a.index('apple')) print(a.index('apple',10)) print(a.rindex('apple'))#从右向左 #同上 但查找不到不会报错 print(a.find('apple')) print(a.find('apple', 10)) print(a.rfind('apple')) print(a.find('banana')) print(a.rfind('banana'))
字符串对齐操作
-
center()
居中 -
rjust()
右对齐 -
ljust()
左对齐a = 'hello, world' print(a.center(80, '~')) # 居中80个字符 可以指定字符,默认空格。用~填充也可换其它 print(a.rjust(80, '=')) # 右对齐 print(a.ljust(80, '-')) # 左对齐
-
zfill()
零填充(在左边补0)b = '123' print(b.zfill(6)) # 零填充(在左边补六个0)
字符串的修剪操作
-
strip()
修剪字符串两端空格 -
lstrip()
修剪字符串左端空格 -
rstrip()
修剪字符串右端空格 -
replace()
将指定的字符串替换为新的内容email = ' 308143018@qq.com ' content = ' 马化腾是个傻逼 ' #修剪字符串左右两端空格 print(email.strip()) print(content.strip()) #修剪字符串左端的空格 print(email.lstrip()) #修剪字符串右端的空格 print(email.rstrip()) #将指定的字符串替换为新的内容 print(content.strip().replace('马化腾','*').replace('傻逼','*'))
字符串的拆分与合并
-
split()
用空格拆分字符串得到一个列表 -
rsplit()
从右向左进行字符串拆分 -
print(' '.join(contents))
将列表中的字符串,用指定的字符连接起来content = 'You go your way, I will go mine.' content2 = content.replace(',','').replace(',','') # 用空格拆分字符串得到一个列表 words = content2.split() print(words, len(words)) for word in words: print(word) # 用空格拆分字符串,最多允许拆分三次 words = content2.split(' ', maxsplit=3) print(words, len(words)) #从右向左进行字符串拆分,做多允许拆分三次 words = content2.rsplit(' ',maxsplit=3) print(words,len(words)) #用逗号拆分字符串 items = content.split(',') for item in items: print(item) contents = [ '请不要相信我的美丽', '更不要相信我的爱情', '因为在涂满油彩的面孔下', '有着一颗戏子的心' ] #将列表中的字符串,用指定的字符连接起来 这里用的是空格 print(' '.join(contents))
字符串的编码与解码
字符串的编码与解码非常重要,在我们的以后数据提取与分析中有着重要的作用。
要点;
1.选者字符集(编码)的时候,最佳的选择(也是默认的)是UTF-8。
2.编码和解码的字符集要保持一致,否则就会出现乱码现象。
3.不能用IOS-8856-1编码保存中文,否则会出现编码黑洞,中文变成?。
4.UTF-8是Unicode的一种实现方案,也一种变长的编码。
最少1个字节(英文和数字),最多4个字节(Emoji),表示中文用3个字节。
编码,str(字符串) --->encode() --->bytes(字节串)
解码:bytes(字节串) --->decode() --->str(字符串)
-
encode()
编码 -
decode()
解码# 字符串的编码和解码(gbk《——gbk2312 《——ASCII) # 编码(以后选UTF-8(万国码),变长的编码方式,中文占3个字符) # .encode(编码类型) # 默认UTF-8 # 解码 # .decode(编码类型) # 例子: a = '我爱你中国' print(a.encode('gbk')) b = b'\xce\xd2\xb0\xae\xc4\xe3\xd6\xd0\xb9\xfa' print(b.decode('gbk')) message = 'attack at dawn' # 生成字符串转换的对照表 table = str.maketrans( 'abcdefghijklmnopqrstuvwxyz', 'defghijklmnopqrstuvwxyzabc' ) # 通过字符串的.translate()方法实现字符串的转译 print(message.translate(table))
字符串格式化操作
主要有三种
c = 1234
d = 345
print(f'{c}+{d}={c + d:.2f}')# python 3.6 以上才有的格式化字符串的语法 :.2f 输出结果保留两位小数
#下面和上面的写法等价的语法 建议使用这一种
print('%d + %d = %d' % (c, d, c + d))
print('{}+{}={}'.format(c, d, c + d))
print('{2}+{1}={0}'.format(c + d, d, c))#也可以加下标表示对应的位置
训练
生成随机验证码(数字由文字字母构成,长度为4)
方法一
import random
nums = [str(i) for i in range(10)]#把0~9转换成字符串列表
print(nums)
big_leteers = [chr(i) for i in range(65,91)]#把26个字母的ASCII码转换成字符
print(big_leteers)
small_letters = [chr(i) for i in range(97,123)]#小写
all_letters = big_leteers + small_letters+nums#拼接
for _ in range(4):
selected_chars = random.choices(all_letters,k=4) #choices()随机又放回抽样 抽4次
print(''.join(selected_chars))#把列表内字符串连接起来
print()
方法二
import random
import string #字符串模块
all_chars = string.ascii_letters +string.digits#把字母和数字拼接
for _ in range(4):
selected_chars = random.choices(all_chars,k=4)
print(''.join(selected_chars))
总结
知道如何表示和操作字符串对程序员来说是非常重要的,因为我们需要处理文本信息,Python中操作字符串可以用拼接、切片等运算符,也可以使用字符串类型的方法。