python字符串(f字符串、r字符串)

需要掌握ASCII、GBK、Unicode、UTF-8编码

概述

人类的文明特征之一是 文字,计算机的重要使用场景之一就是 处理文字,在计算机中将文字成为“ 字符串 ”

python中,str类型表示字符串,在内存中是Unicode编码,是 不可变序列

在常见开发语言中(C/C++/JAVA/C#),字符串都是重要且常用的数据类型
JAVA、C#,都采用Unicode编码

定义字符串

单行字符串

s='测试'

等同于

s="测试"

多行字符串

s='''这是
多行
字符串'''

等同于

s="""这是
多行
字符串"""

转义字符

'\n' 是换行符
'\t' 是制表符

例子

s = "窗前明月光\n疑是地上霜" # 写成一行
print(s)

执行结果:

窗前明月光   # 打印成两行
疑是地上霜

双 \

'\\t' 对斜杠进行转义,此时只输出\t

f字符串(前面加:f/F)

Python 3.6+ 推出,目前最推荐的字符串格式化方式,简洁高效。

字符串前加 f / F,{变量/表达式} 直接嵌入文本

name = "张三"
age = 22
s = f"姓名:{name},年龄:{age}"
print(s)
# 输出:姓名:张三,年龄:22

大括号内支持任意表达式

a = 10
b = 3
print(f"求和 {a + b},除法 {a / b}")
print(f"平方 {a ** 2}")

def hello():
    return "测试函数"
print(f"调用函数:{hello()}")

格式控制(: 冒号格式化)

通用模板:{变量:格式说明符}

数字常用格式化

num = 123.45678
# 保留2位小数
print(f"{num:.2f}")      # 123.46
# 千位分隔符
print(f"{1234567:,}")    # 1,234,567
# 固定宽度,右对齐
print(f"{num:10.2f}")
# 百分比
print(f"{0.789:.1%}")    # 78.9%
# 整数进制
n = 20
print(f"十进制{n}, 十六进制{n:x}, 二进制{n:b}")

对齐填充

text = "python"
print(f"{text:<10}")  # 左对齐,占10字符
print(f"{text:>10}")  # 右对齐
print(f"{text:^10}")  # 居中
print(f"{text:=^10}") # 居中,=填充:==python==

转义大括号

想要输出字面量 { 和 },写两层

print(f"{{hello}} {1+1}")
# 输出:{hello} 2

❌ 不能用 \{ 转义,f-string不支持反斜杠转义大括号

多行f-string

name = "李四"
info = (
    f"名字:{name}\n"
    f"年龄:{20}"
)
# 或者三引号
msg = f"""
姓名: {name}
年份: {2026}
"""

重要限制

  1. f-string内部不能直接出现反斜杠 \
    # 报错!
    # s = f"test{\n}"
    # 解决:先把换行存入变量
    newline = "\n"
    s = f"test{newline}"
    
  2. 不能在 {} 内部使用注释 #
  3. Python 3.5及更早版本不支持

r字符串(前面加:r/R)

r 前缀表示 原始字符串(raw string),它会取消字符串中的转义字符(如 \n、\t)的特殊含义。

原始字符串适用于需要保留转义字符原始形式的情况,如:

  • 正则表达式
  • 文件路径

例子

s = r"窗前明月光\n疑是地上霜"

print(s)

b字符串(前面加:b)

表示bytes类型,以字节序列的方式表示字符串

python3.x中的字符串是unicode编码,以字符为单位。

字符串前加b,b'python'是bytes类型,以byte(字节)为单位,是二进制。其内容可以直接使用ASCII码,但不能是汉字

处理字符串

截取字符串

语法:

str[开始位置:结束位置]
  1. 开始位置
    为正数时,从0开始,超过最大长度也不报错
    为负数时,表示从右面往左数,-1表示从右面数第一个

  2. 结束位置
    截取字符串的位置,但不包含该元素。
    为空时,表示末尾
    为正数时,超过最大长度也不报错
    为负数时,表示从右面往左数,-1表示从右面数第一个

不足位数补0

在电商平台生成订单号时,有位数要求,不足位数前面补0

#不足8位补0
s="%08d"%1
print(s)

常用字符串方法

https://malaoshi.top/show_1IXtF4Th0xV.html

练习

  1. 字符串模板。在发送短信、app内部消息时、注册成功邮件、找回密码邮件等,一般使用字符串模板,如:“尊敬的XXX,您好,感谢您使用本app,您的登录名是XXX,密码是XXX”
    编码:将上面的模板替换为自己的名字、手机号,出生年月日

  2. 通过词频分析红楼梦后40回作者是否曹雪芹
    原理:每个作者都有写作习惯,如:“之乎者也”这类虚词的使用频率。分析120回每个章节中“之乎者也”出现的频率,并对比前80回和后40回的次数,即可判断后40回作者是否曹雪芹
    编程:通过使用字符串函数获取“之后者也”的出现次数

  3. 有些软件会对文件格式做校验,校验方式之一是对文件名的后缀做比对,如判断是否图片,就是通过比对文件名后缀是“.jpg”、“.png”等
    编程:判断“head.jpg”、“1.Png”、“绩效.doc”、“全家福.JPG”,哪些文件名是图片

  4. 敏感词过滤。很多社交软件、弹幕、论坛等都会有敏感词过滤。
    编程:分析一段话是否包含敏感词,并把敏感词替换成*

  5. 判断字符串是否数字。在使用input()函数,需要用户填写年龄、年份或电话号时,需要判断输入的字符串是否是数字(作为一只有修养的程序猿,我们需要编码严谨)
    编程:判断用户输入的字符串是否是数字(需要过滤前后空格),如果是数字,转换成int型

    提示:
    isdigit()
    isdecimal()
    isnumeric()

  6. 很多程序有字符串长度限制,比如发微博、发短信等。
    编程:当字符串超过10个字时,截取前10个

感谢帖子:
https://blog.csdn.net/u010496169/article/details/70045895


原文出处:/show_1EF1PjrKp8X7.html