Python字符串-B08

字符串的定义

所谓字符串,就是由零个或多个字符组成的有限序列 。在Python程序中,通常把单个或多个字符用单引号或者双引号包围起来,就可以表示一个字符串。字符串中的字符可以是特殊符号、英文字母、中文字符、日文的平假名或片假名、希腊字母、Emoji字符等。

a='hello,world'
b="hello,world"
# 以三个双引号或单引号开头的字符串可以折行
c='''
窗前明月光,
疑是地上霜。
'''

转义字符和原始字符

可以在字符串中使用\(反斜杠)来表示转义,也就是说\后面的字符不再是它原来的意义,例如:\n不是代表反斜杠和字符n,而是表示换行;\t也不是代表反斜杠和字符t,而是表示制表符。

所以如果字符串本身又包含了'、"\这些特殊的字符,必须要通过\进行转义处理。

例如要输出一个带单引号或反斜杠的字符串,需要用如下所示的方法。

a='\'hello,world\''
b="\"hello,world\""
print(a)            # 'hello,world'
print(b)            # "hello,world"

原始字符串,每个字符都是它原始的含义,没有转移字符,Python中的字符串可以rR开头。

d = r'c:\Users\Administrator\abc\hello.py'
print(d)              # c:\Users\Administrator\abc\hello.py

# 带占位符的字符串(格式化字符串)
e = f'文件路径: {d}'
print(e)              # 文件路径: c:\Users\Administrator\abc\hello.py

此外,两种输出

# `\`后面还可以跟一个八进制或者十六进制数来表示字符
s1 = '\141\142\143\x61\x62\x63'  # 前面3个八进制,后面3个十六进制
print(s1)                        # abcabc
# `\u`后面跟Unicode字符编码
s2 = '\u9a86\u660a'
print(s2)                        

字符串的运算

a='hello, world'      # world前有空格

# 重复运算
print(a * 5)          # hello, worldhello, worldhello, worldhello, worldhello, world  
# 成员运算
print('or' in a)      # True
print('wd' in a)      # False

b = 'hello, World'    # World前有空格且W大写

# 比较运算(比较字符串的内容 ---> 字符编码大小)
print(a == b)         # False    
print(a != b)         # True

c = 'goodbye, world'

print(b > c)          # True

d = 'hello, everybody'

print(b >= d)         # False
print(ord('W'), ord('e'))       # 87 101
# 字符串的拼接
e = '!!!'
print(d + e)          # hello, everybody!!!
# 索引和切片
a = 'hello, world'

print(a[0], a[-len(a)])         # h h
print(a[len(a) - 1], a[-1])     # d d
print(a[5], a[-7])              # , ,

print(a[2:5])                   # llo
print(a[1:10:2])                # el,wr
print(a[::-1]) ---->反转        # dlrow ,olleh
# 获取字符串的长度
print(len(a))  # 12 (因为有空格,所以长度是12)

# 循环遍历字符串的每个字符
# 遍历方式1
for i in range(len(a)):
    print(a[i])
# 遍历方式2
for i in a:
    print(i)

字符串的操作

大小写相关操作

a=i LOVE you
# 转大写
print(a.upper())         # I LOVE YOU
# 转小写
print(a.lower())         # i love you
# 首字母大写
print(a.capitalize())    # I love you
# 每个单词首字母大写
print(a.title())         # I Love You

性质判断

b='abc123'

# 判断字符串是不是数字
print(b.isdigit())                # False
# 判断字符串是不是字母
print(b.isalpha())                # False     
# 判断字符串是不是字母和数字
print(b.isalnum())                # True
# 判断字符串是不是ASII码字符
print(b.isascii())                # True

c='你好呀'
print(c.isascii())                # False 

# 判断字符串是否以指定内容开头
print(c.startswith('你好'))        # True
# 判断字符串是否以指定内容结尾
print(c.endswith('啊'))            # False

查找操作

在一个字符串中从前向后查找有没有另外一个字符串,可以使用字符串的findindex方法。

a = 'Oh apple, i love apple.'
# index - 从左向右寻找指定的子串(substring),可以指定从哪开始找,默认是0
# 找到了返回子串对应的索引(下标),找不到直接报错(程序崩溃)
print(a.index('apple'))                   # 3
print(a.index('apple', 10))               # 17
# rindex -从右向左找,找到了返回子串对应的索引(下标,此标也是从左到右数的)
print(a.rindex('apple'))                  # 17
# 找不到直接报错(程序崩溃)
print(a.index('banana'))                  # 保错 ValueError: substring not found

print(a.find('apple'))                    # 3
print(a.find('apple', 10))                # 17
print(a.rfind('apple'))                   # 17
# 与index 不同的是 find 找不到直接报时输出-1
print(a.find('banana'))                   # -1
print(a.rfind('banana'))                  # -1

格式化字符串

python中居中、左对齐和右对齐的处理 :

# 居中
print(a.center(20, '~'))      # ~~~~~hello,word~~~~~
# 右对齐
print(a.rjust(20, '~'))       # ~~~~~~~~~~hello,word
# 左对齐
print(a.ljust(20, '~'))       # hello,word~~~~~~~~~~

b = '123'
# 零填充(在左边补零)
print(b.zfill(6))             # 000123

字符串的格式化输出

c = 1234
d = 123
# 方式1
print('%d+%d=%d' % (c, d, c + d,))
# 方式2:Python3.6以后引入的格式化字符串便捷语法
print(f'{c}+{d}={c + d}')
# 方式3
print('{}+{}={}'.format(c, d, c + d))
# 方式4
print('{0}+{1}={2}'.format(c, d, c + d))

若需进一步控制格式化语法中变量值的形式,可以参照下面的表格来进行字符串格式化操作 。

字符串的修剪

content = '   马某某是个二货   '

# 修剪字符串左右两端的空格
print(content.strip())        # 马某某是个二货
# 修剪字符串左端的空格
print(content.lstrip())       # 马某某是个二货   
# 修剪字符串右端的空格
print(content.rstrip())       #    马某某是个二货

字符串的替换

# replace把里面的字符串替换为其他的
# print(content.strip()) # 去掉两端空格  
print(content.strip().replace('马','*'))    # 张某某是个*

字符串的拆分与合并

content = 'you go your way, I will go mine.'
content2 = content.replace(',', '').replace('.', '')
# 用空格拆分字符串得到一个列表
words = content2.split()
print(words, len(words)) # ['you', 'go', 'your', 'way', 'I', 'will', 'go', 'mine'] 8
# 用空格拆分字符串,最多允许拆分3次
words = content2.split(' ', maxsplit=3)
print(words, len(words))             # ['you', 'go', 'your', 'way I will go mine'] 4
# 从有向左进行字符串拆分,最多允许拆分3次
words = content2.rsplit(' ', maxsplit=3)
print(words, len(words))             # ['you go your way I', 'will', 'go', 'mine'] 4
# 用逗号拆分字符串
items = content.split(',')
for item in items:
    print(item)                      # you go your way                                                                   *                                      I w ill go mine.
contents = [
    '请不要相信我的美丽',
    '更不要相信我的爱情',
    '因为在涂满油彩的面孔下',
    '有着一颗戏子的心'
]
# 将列表中的元素用指定的字符串连接起来
print(' '.join(contents))   
# 输出结果:请不要相信我的美丽 更不要相信我的爱情 因为在涂满油彩的面孔下 有着一颗戏子的心

字符串的编码和解码

两种方式: str(字符串)--->encode()--->bytes(字节串)

                     bytes(字节串)--->decode()--->str(字符串)

要点:

1、选择字符集(编码)的时候,最佳的选择(也是默认的)是UTF-8编码。

 2、编码和解码的字符集要保持一致,否则就会出现乱码现象。

 3、不能用ISO-8859-1编码保存中文,否则就会出现编码黑洞,中文变成?

 4、UTF-8是Unicode的一种实现方案,也一种变长的编码,最少1个字节(英文和数字),最  多 4个字节(Emoji),表示中文用3个字节。

a = '我爱你中国亲爱的母亲'
# GBK <--- GB2312 <---- ASCII
# UTF-8编码是Unicode(万国码)的一种实现方案
b = a.encode('utf-8')
print(type(b))
print(b, len(b))
c = b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xb2\xe7\x88\xb1\xe7\x9a\x84\xe6\xaf\x8d\xe4\xba\xb2'
print(c.decode('utf-8'))      # 我爱你中国亲爱的母亲
# 如果编码和解码的方式不一致,Python中可能会产生UnicodeDecodeError异常
# 也有可能会出现乱码现象
print(c.decode('gbk'))        # 鎴戠埍浣犱腑鍥戒翰鐖辩殑姣嶄翰

凯撒密码:通过对应字符的替换,实现对明文进行加密的一种方式。

message = 'attack at dawn.'
# 生成字符串转换的对照表
table = str.maketrans(
    'abcdefghijklmnopqrstuvwxyz',
    'defghijklmnopqrstuvwxyzabc'
)
# 通过字符串的translate方法实现字符串转译
print(message.translate(table))                 # dwwdfn dw gdzq

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值