python学习第四天
字符串
概念
在 Python 中,字符串可以用单引号 '
或双引号 "
定义,由多个字符组成。(字符:就是各种文字和符号、包括了各个国家的文字、标点符号、图形符号、数字等,字符串是不可以改变的对象,如果对字符串进行了更改那么他就是新的字符串。注意:跟Java的区别python中没有字符的概念,只有字符串的概念)。
分类
普通字符串
-
普通字符串是 Python 中最常用的字符串类型。
-
支持转义字符,例如
\n
(换行)、\t
(制表符:就是回车、将光标移动到当前行的开头,后续的内容会从行首开始覆盖已有的内容)等。 -
适用于大多数文本处理场景。
-
多行字符串使用三重引号 ''' 或 """ 可以定义多行字符串。
# 普通字符串 支持转义字符,例如\n(换行)
string = '这是一个普通字符\n换行了'
print(string)
# \t(制表符)将光标移动到当前行的开头,后续的内容会从行首开始覆盖已有的内容 从‘替换了’把前面的字符替换了
string = '这是一个普通字符\r替换了'
print(string)
'''
输出内容
这是一个普通字符支持
换行了
替换了
'''
# 多行字符串 使用三重引号 ''' 或 """ 可以定义多行字符串。 注意喽 有变量承载的时候是多行字符串 没有的时候是注释
string = '''
多行字符串测试
这是一个普通字符\n换行了
'''
print(string)
补充常见的转义字符(留着后续方便查看)
转义字符 | 描述 | 示例 |
---|---|---|
\\ | 反斜杠(\ ) | "C:\\path" → C:\path |
\' | 单引号(' ) | 'It\'s me' → It's me |
\" | 双引号(" ) | "He said, \"Hello\"" → He said, "Hello" |
\n | 换行符(Newline) | "Hello\nWorld" → Hello World |
\t | 水平制表符(Tab) | "Hello\tWorld" → Hello World |
\r | 回车符(Carriage Return) | "Hello\rWorld" → World |
\b | 退格符(Backspace) | "Hello\bWorld" → HellWorld |
\f | 换页符(Form Feed) | "Hello\fWorld" → 换页效果 |
\v | 垂直制表符(Vertical Tab) | "Hello\vWorld" → 垂直制表效果 |
\a | 响铃符(Bell) | print("\a") → 终端响铃 |
\ooo | 八进制值的字符(ooo 为 1-3 位八进制数) | "\101" → A (ASCII 65) |
\xhh | 十六进制值的字符(hh 为 2 位十六进制数) | "\x41" → A (ASCII 65) |
\uhhhh | Unicode 字符(hhhh 为 4 位十六进制数) | "\u0041" → A |
\Uhhhhhhhh | Unicode 字符(hhhhhhhh 为 8 位十六进制数) | "\U0001F600" → 😀(建议试试挺有意思) |
转义字符输出心
# 兄弟们快来玩谁弄得最好 打在评论区
import random
list = ["\U0001F600","\U0001F603","\U0001F604","\U0001F601","\U0001F606","\U0001F602","\U0001F923","\U0001F60A","\U0001F607","\U0001F642","\U0001F609","\U0001F60C","\U0001F60D","\U0001F618","\U0001F617","\U0001F619","\U0001F61B","\U0001F627","\U0001F62E","\U0001F632","\U0001F635","\U0001F633","\U0001F631","\U0001F628","\U0001F630","\U0001F622","\U0001F625","\U0001F62A","\U0001F613","\U0001F62D","\U0001F634","\U0001F637","\U0001F912","\U0001F915"]
def print_heart():
heart = [
" ****** ****** ",
" ******* ******* ",
"*****************",
" *************** ",
" ************* ",
" *********** ",
" ********* ",
" ******* ",
" ***** ",
" *** ",
" * "
]
for line in heart:
random_emoji = random.choice(list)
print(line.replace("*",random_emoji))
# 调用函数打印心形
print_heart()
'''
输出结果 还蛮好看的
😥😥😥😥😥😥 😥😥😥😥😥😥
😛😛😛😛😛😛😛 😛😛😛😛😛😛😛
😳😳😳😳😳😳😳😳😳😳😳😳😳😳😳😳😳
😨😨😨😨😨😨😨😨😨😨😨😨😨😨😨
😗😗😗😗😗😗😗😗😗😗😗😗😗
🤕🤕🤕🤕🤕🤕🤕🤕🤕🤕🤕
😢😢😢😢😢😢😢😢😢
😓😓😓😓😓😓😓
😆😆😆😆😆
😀😀😀
😄
'''
二进制字符串
-
二进制字符串通过在普通字符串前加
b
定义。 -
表示字节数据,而不是文本数据。
-
适用于处理二进制文件、网络传输等场景。
# 二进制字符串
string = b"这是一个二进制字符串"
print(string)
'''
输出结果
报错SyntaxError: bytes can only contain ASCII literal characters
'''
string = b"hello"
print(string) # 输出:b'hello'
# 想要得到 hello需要decode方法即可
string = b"hello"
print(string.decode('utf-8')) # 输出:hello
原始字符串
-
原始字符串通过在普通字符串前加
r
或R
定义。 -
转义字符不会被解析,直接作为普通字符处理。
-
常用于文件路径、正则表达式等场景,避免转义字符的干扰。
# 原始字符串 例如有转义字符的那么我们输出不需要转移的原始的文字
string = r'这是一个原始字符串\n换行了'
print(string)
'''
输出内容
这是一个原始字符串\n换行了
'''
分类对比
特性 | 普通字符串 | 原始字符串 | 二进制字符串 |
---|---|---|---|
定义方式 | 使用单引号 ' 或双引号 " ,例如:"Hello" 或 'World' | 在普通字符串前加 r ,例如:r"C:\path" | 使用 b 前缀,例如:b"Hello" |
用途 | 表示文本数据,支持转义字符(如 \n 、\t 等) | 表示原始文本数据,忽略转义字符(常用于文件路径、正则表达式等) | 表示二进制数据(如字节流、网络传输数据等) |
转义字符处理 | 转义字符会被解析,例如 \n 会被解析为换行符 | 转义字符不会被解析,\n 会被当作普通字符处理 | 转义字符会被解析,但内容必须是 ASCII 字符或十六进制值 |
示例 | s = "Hello\nWorld" 输出: Hello World | s = r"Hello\nWorld" 输出: Hello\nWorld | s = b"Hello" 输出: b'Hello' |
是否可变 | 不可变 | 不可变 | 不可变 |
编码方式 | 默认使用 Unicode 编码 | 默认使用 Unicode 编码 | 使用 ASCII 编码或指定的编码方式 |
适用场景 | 一般文本处理、字符串拼接、格式化等 | 文件路径、正则表达式、避免转义字符干扰的场景 | 网络传输、文件读写(二进制模式)、加密解密等 |
常见操作 | 拼接、切片、格式化、查找、替换等 | 与普通字符串相同,但转义字符不会被解析 | 解码为普通字符串、编码为二进制数据、字节操作等 |
常见操作
编码
字符串.encode('字符集')
把字符串的编码成指定字符集
#常见操作 编码 使用utf8字符集进行编码
string = "你是个大帅哥"
print(string.encode(encoding='utf-8'))
解码
字符串.decode('字符集')
把字符串的解码成指定字符集
#常见操作 解码 注意编解码一致即可
string = "你是个大帅哥"
s = string.encode(encoding='utf-8')
print(s.decode(encoding='utf-8'))
常用方法
Python 提供了许多内置的字符串方法,以下是一些常用的方法:
-
len()
:返回字符串的长度。 -
lower()
:将字符串转换为小写。 -
upper()
:将字符串转换为大写。 -
strip()
:去除字符串两端的空白字符。 -
replace(old, new)
:将字符串中的old
替换为new
。 -
split()
:将字符串按指定的分隔符分割成列表。 -
join()
:将列表中的字符串连接成一个字符串。
# 常见方法操作 长度:len() 小写:lower() 大写:upper() 去除首位空格:strip() 替换:replace() 分割:split() 链接:join
string = " Hello, World! "
print(len(string)) # 输出 15
print(string.lower()) # 输出 " hello, world! "
print(string.upper()) # 输出 " HELLO, WORLD! "
print(string.strip()) # 输出 "Hello, World!"
print(string.replace("World", "Python")) # 输出 " Hello, Python! "
print(string.split(",")) # 输出 [' Hello', ' World! ']
print("-".join(["Hello", "World"])) # 输出 "Hello-World"
格式化
Python 提供了多种字符串格式化的方式:
-
使用
%
操作符(旧式格式化)(需要有占位符,占位符看下图不能随便写哈平时用%s)。 -
使用
str.format()
方法,格式"字符串{}".format(需要格式化的字符串)。
-
使用 f-string(Python 3.6+ 推荐使用),格式f"字符串内容{需要格式化的字符串内容}"。
占位符 | 描述 | 示例 |
---|---|---|
%s | 字符串(或任何对象,自动调用 str() ) | "Name: %s" % "Alice" |
%d | 十进制整数 | "Age: %d" % 25 |
%f | 浮点数 | "Price: %f" % 3.14 |
%.nf | 保留 n 位小数的浮点数 | "Price: %.2f" % 3.14159 |
%x | 十六进制整数(小写) | "Hex: %x" % 255 (输出 ff ) |
%X | 十六进制整数(大写) | "Hex: %X" % 255 (输出 FF ) |
%o | 八进制整数 | "Oct: %o" % 8 (输出 10 ) |
%e | 科学计数法(小写 e ) | "Sci: %e" % 1000 (输出 1.000000e+03 ) |
%E | 科学计数法(大写 E ) | "Sci: %E" % 1000 (输出 1.000000E+03 ) |
%g | 自动选择 %f 或 %e | "Num: %g" % 0.0001 (输出 0.0001 ) |
%c | 单个字符 | "Char: %c" % 65 (输出 A ) |
%% | 输出百分号 % | "Discount: %d%%" % 20 (输出 20% ) |
# 格式化使用使用str.format()方法。
string = "2025-03-04"
# %操作符(旧式格式化)。主要要使用操作符%s 不能乱写 乱写会报错
print("今天是%s" % (string)) # 今天是2025-03-04
# 使用 str.format() 方法。
print("今天是{}".format(string)) # 今天是2025-03-04
# 使用 f-string(Python 3.6+ 推荐使用)。
print(f"今天是{string}") # 今天是2025-03-04
查找和替换
方法 | 描述 | 示例 |
---|---|---|
find(sub[, start[, end]]) | 返回子字符串 sub 第一次出现的索引,未找到返回 -1 。 | "hello world".find("e") → 1 |
rfind(sub[, start[, end]]) | 返回子字符串 sub 最后一次出现的索引,未找到返回 -1 。 | "helloworld".rfind("l") → 9 |
index(sub[, start[, end]]) | 返回子字符串 sub 第一次出现的索引,未找到抛出 ValueError 。 | "helloworld".index("e") → 1 |
rindex(sub[, start[, end]]) | 返回子字符串 sub 最后一次出现的索引,未找到抛出 ValueError 。 | "helloworld".rindex("l") → 8 |
count(sub[, start[, end]]) | 返回子字符串 sub 在字符串中出现的次数。 | "helloworld".count("l") → 3 |
replace(old, new[, count]) | 将字符串中的 old 替换为 new ,可选参数 count 指定替换次数。 | "helloworld".replace("l", "x") → "hexxoworld" |
startswith(prefix[, start[, end]]) | 检查字符串是否以 prefix 开头,返回 True 或 False 。 | "helloworld".startswith("he") → True |
endswith(suffix[, start[, end]]) | 检查字符串是否以 suffix 结尾,返回 True 或 False 。 | "helloworld".endswith("ss") → False |
string = "helloworld"
#find(sub[, start[, end]]) 返回子字符串sub第一次出现的索引,未找到返回-1。 "hello world".find("e")→1
print(string.find("e")) # 输出结果:1
#rfind(sub[, start[, end]]) 返回子字符串sub最后一次出现的索引,未找到返回-1。 "hello world".rfind("l")→9
print(string.rfind("l")) # 输出结果:9
#index(sub[, start[, end]]) 返回子字符串sub第一次出现的索引,未找到抛出ValueError。 "hello".index("e")→1
print(string.index("e")) # 输出结果:1
#rindex(sub[, start[, end]]) 返回子字符串sub最后一次出现的索引,未找到抛出ValueError。 "hello".rindex("l")→8
print(string.rindex("l")) # 输出结果:8
#count(sub[, start[, end]]) 返回子字符串sub在字符串中出现的次数。 "hello".count("l")→3
print(string.count("l")) # 输出结果:3
#replace(old, new[, count]) 将字符串中的old替换为new,可选参数count指定替换次数。 "hello".replace("l", "x")→"hexxoworxd"
print(string.replace("l","x")) # 输出结果:hexxoworxd
#startswith(prefix[, start[, end]]) 检查字符串是否以prefix开头,返回True或False。 "hello".startswith("he")→True
print(string.startswith("he")) # 输出结果:True
#endswith(suffix[, start[, end]]) 检查字符串是否以suffix结尾,返回True或False。 "hello".endswith("lo")→True
print(string.endswith("ss")) # 输出结果:False
判断
方法 | 描述 | 示例 |
---|---|---|
isalpha() | 检查字符串是否只包含字母(至少一个字符)。 | "hello".isalpha() → True |
isdigit() | 检查字符串是否只包含数字(至少一个字符)。 | "123".isdigit() → True |
isalnum() | 检查字符串是否只包含字母和数字(至少一个字符)。 | "hello123".isalnum() → True |
isspace() | 检查字符串是否只包含空白字符(至少一个字符)。 | " ".isspace() → True |
islower() | 检查字符串中的字母是否全部为小写(至少一个字母)。 | "hello".islower() → True |
isupper() | 检查字符串中的字母是否全部为大写(至少一个字母)。 | "HELLO".isupper() → True |
istitle() | 检查字符串是否标题化(每个单词首字母大写)。 | "Hello World".istitle() → True |
isnumeric() | 检查字符串是否只包含数字字符(包括 Unicode 数字)。 | "½".isnumeric() → True |
isdecimal() | 检查字符串是否只包含十进制数字字符。 | "123".isdecimal() → True |
isidentifier() | 检查字符串是否是有效的 Python 标识符(变量名)。 | "hello_world".isidentifier() → True |
isprintable() | 检查字符串是否全部为可打印字符。 | "hello\n".isprintable() → False |
# isalpha() 检查字符串是否只包含字母(至少一个字符)。 "hello".isalpha()→True
print("hello".isalpha()) # 输出结果:True
# isdigit() 检查字符串是否只包含数字(至少一个字符)。 "123".isdigit()→True
print("123".isdigit()) # 输出结果:True
# isalnum() 检查字符串是否只包含字母和数字(至少一个字符)。 "hello123".isalnum()→True
print("hello123".isalnum()) # 输出结果:True
# isspace() 检查字符串是否只包含空白字符(至少一个字符)。 " ".isspace()→True
print(" ".isspace()) # 输出结果:True
# islower() 检查字符串中的字母是否全部为小写(至少一个字母)。 "hello".islower()→True
print("hello".islower()) # 输出结果:True
# isupper() 检查字符串中的字母是否全部为大写(至少一个字母)。 "HELLO".isupper()→True
print("HELLO".isupper()) # 输出结果:True
# istitle() 检查字符串是否标题化(每个单词首字母大写)。 "Hello World".istitle()→True
print("Hello World".istitle()) # 输出结果:True
# isnumeric() 检查字符串是否只包含数字字符(包括 Unicode 数字)。 "½".isnumeric()→True
print("½".isnumeric()) # 输出结果:True
# isdecimal() 检查字符串是否只包含十进制数字字符。 "123".isdecimal()→True
print("123".isdecimal()) # 输出结果:True
# isidentifier() 检查字符串是否是有效的 Python 标识符(变量名)。 "hello_world".isidentifier()→True
print("hello_world".isidentifier()) # 输出结果:True
# isprintable() 检查字符串是否全部为可打印字符。 "hello\n".isprintable()→False
print("hello\n".isprintable()) # 输出结果:False