Skip to content

字符串

字符串是 Python 中使用最多的基本数据类型。在计算机世界中运行的结果,一般都会以字符串的形式输出,然后将其打印或保存到 txtexcelhtml 等等。所以字符串是一个非常重要的数据类型,并且有很多的方法可以操作、修改它。

字符串是一种不可变的序列类型。

字符串创建

字符串是 Python 中最常用的数据类型。我们可以使用单引号(')或双引号(")来创建字符串。

创建字符串很简单,只要为变量分配一个值即可。

python
>>> name = '正心'
>>> hobby = "写代码"

1、单引号和双引号的区别

Python 中我们都知道单引号和双引号都可以用来表示一个字符串,比如

python
>>> print("What's your name?")
What's your name?
>>> print('"python"是一门优秀的语言')
"python"是一门优秀的语言

总体来说没有任何区别,只在单引号当普通字符时容易区分:如 var = "let's go"

2、三引号创建块长字符串

python
# 三引号实现块注释
""" 文档注释
三引号实现块注释
"""

如果有非常长的文字,可以使用三个单引号或三个双引号进行创建。

字符串格式化

在 Python 中可以使用 print 函数将信息输出到控制台。 如果希望输出文字信息的同时,一起输出数据,就需要使用到 格式化操作符

Python 中有三种格式化操作符,分别是 format%sf

format

此函数可以快速的处理各种字符串,增强了字符串格式化的功能。基本语法是使用 {}.format()format 函数可以接受不限各参数,位置可以不按照顺序

python
name = '张三'
age = 18
nickname = '法外狂徒'

# format 用 {} 占位
print('姓名:{},年龄{},外号:{} '.format(name, age, nickname))
print('hello {} 你今年已经{}岁了'.format(name, age))

f

f'{}'形式,并不是真正的字符串常量,而是一个运算求值表达式,可以很方便的用于字符串拼接、路径拼接等

python
name = '张三'

# f 在字符串中嵌入变量
print(f'hello {name} !')

提示

关于 f 格式化符号还有很多用法,如果想要了解可以参考 这篇文章

%s

% 被称为格式化操作符,专门用于处理字符串中的格式

  • 包含 % 的字符串,被称为格式化字符串
  • % 和不同的字符连用,不同类型的数据需要使用不同的格式化字符
格式化字符含义
%s字符串
%d有符号十进制整数,%06d 表示输出的整数显示位数,不足的地方使用 0 补全
%f浮点数,%.2f 表示小数点后只显示两位
%%输出 %
%c%ASCII字符
%o%8进制
%x%16进制
%e%科学计数法

语法格式如下:

python
print("格式化字符串 %s" % '变量1')

print("格式化字符串" % ('变量1', '变量2', ...))
python
name = '张三'
age = 18
nickname = '法外狂徒'

name2 = '李四'
age2 = 19
nickname2 = '帮凶'

# %s 用 %s 占位
print('姓名:%s' % name)
# 多个参数
print('%s%s 哦嗨呦' % (name, name2))

案例

猫眼 top100 的网址有以下特点:

txt
第一页:https://maoyan.com/board/4?offset=0
第二页:https://maoyan.com/board/4?offset=10
第三页:https://maoyan.com/board/4?offset=20
....
第十页:https://maoyan.com/board/4?offset=90

请分别使用三种字符串构建的方法创建所有的请求地址

参考代码
python
# format
base_url = 'https://maoyan.com/board/4?offset={page}'
for page in range(10):
    print(base_url.format(page=page))

# %
base_url = 'https://maoyan.com/board/4?offset=%s'
for page in range(10):
    print(base_url % page)

# f
for page in range(10):
    print(f'https://maoyan.com/board/4?offset={page}')

常用方法

字符串是一种非常常用的数据类型,python 内置了很多的操作方法可以使用。因为字符串是不可变数据类型,所以所有的操作都是返回新的一个新的对象,不会修改原有的字符串。

字符串能够使用的方法如下:

python
In [1]: str.
str.capitalize    str.isidentifier  str.rindex
str.casefold      str.islower       str.rjust
str.center        str.isnumeric     str.rpartition
str.count         str.isprintable   str.rsplit
str.encode        str.isspace       str.rstrip
str.endswith      str.istitle       str.split
str.expandtabs    str.isupper       str.splitlines
str.find          str.join          str.startswith
str.format        str.ljust         str.strip
str.format_map    str.lower         str.swapcase
str.index         str.lstrip        str.title
str.isalnum       str.maketrans     str.translate
str.isalpha       str.partition     str.upper
str.isdecimal     str.replace       str.zfill
str.isdigit       str.rfind

虽然字符串的方法很多,但是常用的并不多。

提示

提示:正是因为 python 内置提供的方法足够多,才使得在开发时,能够针对字符串进行更加灵活的操作!应对更多的开发需求!

查找和替换

方法用法
string.strip()默认去掉 string 左右两边的空白字符
string.replace(old_str, new_str)string 中的 old_str 替换成 new_str
string.split() 默认以空白字符进行分割
string.join(seq)seq 中所有的元素(字符串类型)合并为一个新的字符串

注意: seq 指代序列,可以是列表、元祖、生成器(Python 的高级对象)。

案例

python
"""字符串常用方法"""
>>> s = '\n # hello world ! # \n\r'
>>> print(s)

 # hello world ! #

>>> s
'\n # hello world ! # \n\r'
>>> s.strip() # 去掉两端空白字符
'# hello world ! #'
>>> s.strip().strip("#")  # 继续去掉 #
' hello world ! '
>>> s.strip().strip("#").strip() # 支持链式调用 一个套一个
'hello world !'
>>> s
'\n # hello world ! # \n\r'

>>> # 替换
>>> s.replace('#', "")
'\n  hello world !  \n\r'
>>> s.replace('#', "").strip()
'hello world !'

>>> # 分割
>>> s.split()
['#', 'hello', 'world', '!', '#']
>>> s.split("#")
['\n ', ' hello world ! ', ' \n\r']

>>> # 合并
>>> ",".join(s.split())
'#,hello,world,!,#'

>>> # 错误用法
>>> ",".join([1, 2, 3, 4])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found

总结:

输入输出
'hello zhengxin !'.split()['hello', 'zhengxin', '!']
'hello zhengxin !'.split('z')['hello ', 'hengxin !']
'hello zhengxin !'.strpi()hello zhengxin !
'hello zhengxin !'.replace(' ', '#')'hello#zhengxin#!'
' '.join(['hello', 'zhengxin', '!'])'hello zhengxin !'
','.join(['hello', 'zhengxin', '!'])'hello,zhengxin,!'

案例-字符串处理

使用字符串的高级方法,提取text里面的有用数据

  1. 去除 &nbsp; 标签
  2. 去除 <br> 标签
  3. 将每一行都分割出来(列表)
  4. 合并为文章并打印(字符串)
python
text = """
&nbsp;&nbsp;&nbsp;&nbsp;二月二,龙抬头。
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;暮色里,小镇名叫泥瓶巷的僻静地方,有位孤苦伶仃的清瘦少年,此时他正按照习俗,一手持蜡烛,一手持桃枝,照耀房梁、墙壁、木床等处,用桃枝敲敲打打,试图借此驱赶蛇蝎、蜈蚣等,嘴里念念有词,是这座小镇祖祖辈辈传下来的老话:二月二,烛照梁,桃打墙,人间蛇虫无处藏。
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;少年姓陈,名平安,爹娘早逝。小镇的瓷器极负盛名,本朝开国以来,就担当起“奉诏监烧献陵祭器”的重任,有朝廷官员常年驻扎此地,监理官窑事务。无依无靠的少年,很早就当起了烧瓷的窑匠,起先只能做些杂事粗活,跟着一个脾气糟糕的半路师傅,辛苦熬了几年,刚刚琢磨到一点烧瓷的门道,结果世事无常,小镇突然失去了官窑造办这张护身符,小镇周边数十座形若卧龙的窑炉,一夜之间全部被官府勒令关闭熄火。
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;陈平安放下新折的那根桃枝,吹灭蜡烛,走出屋子后,坐在台阶上,仰头望去,星空璀璨。
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;少年至今仍然清晰记得,那个只肯认自己做半个徒弟的老师傅,姓姚,在去年暮秋时分的清晨,被人发现坐在一张小竹椅子上,正对着窑头方向,闭眼了。
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;不过如姚老头这般钻牛角尖的人,终究少数。
"""
参考答案
python
text = text.replace('<br>', "").replace('&nbsp;', "")
print(text.split())
print("\n".join(text.split()))

其他方法

python
"""其他方法"""

>>> hello = "hello world !"
>>> hello.title()  # 修改的 title 首字符大写
'Hello World !'
>>> hello.upper()  # upper 字母变大 lower 字母全部变小
'HELLO WORLD !'
>>> # 检查的 以 is 开头的
>>> # 判断大小写,字符串的开始与结束,字符串的内容
>>> hello.isupper()  # 是不是全部都是大写
False
>>> hello.startswith('hello')  # 以什么字符串开头
True
>>> hello.endswith('hello')  # 以什么字符串结尾
False

很多东西不需要掌握,但是需要知道有这么个东西

如果以前从来都没有接触过,等到后面遇到时就会超出自己的认知范围之外,不怎么怎么解决

我们这个课什么都会讲,需要重点掌握的在课程中会反复出现的,如果只是在课程稍微讲解的,了解就行了

提问:如何改变字符串

将下面的字符串中 world 改成 Python

python
>>> hello = "hello world !"
>>> hello.replace('world', 'Python')
'hello Python !'
>>> hello
'hello world !'

字符串是一种不可变的数据类型。所有操作字符的方法都是返回一个新的字符串。可以用返回的新的字符串覆盖掉之前的字符串。

转义字符

在需要在字符中使用特殊字符时,python 用反斜杠转义字符。如下表:

转义字符描述
\(在行尾时)续行符
\\反斜杠符号
\'单引号
\"双引号
\n换行
\t横向制表符
\r回车

案例

python
"""转义字符"""
# 单、双引号实现跨行
print('hello \
    world !')

# 原始字符 不允许特殊字符进行转义 unicode utf-8 gbk
print(r'hello \n world !')
print('hello \n world !')

"""
常见的特殊字符(正则)
\ / ? [ ] ( ) ' ....

\t(四个空格键) \n(换行) \b \r ....
\r\n windows中的换行
\n Linux下的换行

一个反斜杠是特殊字符
两个反斜杠 才是反斜杠本身
"""

原始字符串

由于字符串中的反斜线都有特殊的作用,因此当字符串中包含反斜线时,就需要使用转义字符 \ 对字符串中包含的每个 \ 进行转义。

比如说,我们要写一个关于 Windows 路径 G:\publish\codes\02\2.4 这样的字符串,如果在 Python 程序中直接这样写肯定是不行的,需要使用 \ 转义字符,对字符串中每个 \ 进行转义,即写成 G:\\publish\\codes\\02\\2.4 这种形式才行。

有没有觉得这种写法很啰嗦,有没有更好的解决办法呢?答案是肯定的,借助于原始字符串可以很好地解决这个问题。

原始字符串以 r 开头,它不会把反斜线当成特殊字符。因此,上面的 Windows 路径可直接写成如下这种形式:

python
# 原始字符串包含的引号,同样需要转义
>>> s2 = r'"Let\'s go", said Charlie'
>>> print(s2)
"Let\'s go", said Charlie
>>> s2
'"Let\\\'s go", said Charlie'