字符串
字符串是 Python 中使用最多的基本数据类型。在计算机世界中运行的结果,一般都会以字符串的形式输出,然后将其打印或保存到 txt
、excel
、html
等等。所以字符串是一个非常重要的数据类型,并且有很多的方法可以操作、修改它。
字符串是一种不可变的序列类型。
字符串创建
字符串是 Python 中最常用的数据类型。我们可以使用单引号('
)或双引号("
)来创建字符串。
创建字符串很简单,只要为变量分配一个值即可。
>>> name = '正心'
>>> hobby = "写代码"
1、单引号和双引号的区别
在 Python
中我们都知道单引号和双引号都可以用来表示一个字符串,比如
>>> print("What's your name?")
What's your name?
>>> print('"python"是一门优秀的语言')
"python"是一门优秀的语言
总体来说没有任何区别,只在单引号当普通字符时容易区分:如 var = "let's go"
2、三引号创建块长字符串
# 三引号实现块注释
""" 文档注释
三引号实现块注释
"""
如果有非常长的文字,可以使用三个单引号或三个双引号进行创建。
字符串格式化
在 Python 中可以使用 print
函数将信息输出到控制台。 如果希望输出文字信息的同时,一起输出数据,就需要使用到 格式化操作符。
Python 中有三种格式化操作符,分别是 format
、%s
、f
。
format
此函数可以快速的处理各种字符串,增强了字符串格式化的功能。基本语法是使用 {}
和 .format()
。format
函数可以接受不限各参数,位置可以不按照顺序
name = '张三'
age = 18
nickname = '法外狂徒'
# format 用 {} 占位
print('姓名:{},年龄{},外号:{} '.format(name, age, nickname))
print('hello {} 你今年已经{}岁了'.format(name, age))
f
f'{}'
形式,并不是真正的字符串常量,而是一个运算求值表达式,可以很方便的用于字符串拼接、路径拼接等
name = '张三'
# f 在字符串中嵌入变量
print(f'hello {name} !')
提示
关于 f
格式化符号还有很多用法,如果想要了解可以参考 这篇文章
%s
%
被称为格式化操作符,专门用于处理字符串中的格式
- 包含
%
的字符串,被称为格式化字符串 %
和不同的字符连用,不同类型的数据需要使用不同的格式化字符
格式化字符 | 含义 |
---|---|
%s | 字符串 |
%d | 有符号十进制整数,%06d 表示输出的整数显示位数,不足的地方使用 0 补全 |
%f | 浮点数,%.2f 表示小数点后只显示两位 |
%% | 输出 % |
%c | %ASCII字符 |
%o | %8进制 |
%x | %16进制 |
%e | %科学计数法 |
语法格式如下:
print("格式化字符串 %s" % '变量1')
print("格式化字符串" % ('变量1', '变量2', ...))
name = '张三'
age = 18
nickname = '法外狂徒'
name2 = '李四'
age2 = 19
nickname2 = '帮凶'
# %s 用 %s 占位
print('姓名:%s' % name)
# 多个参数
print('%s,%s 哦嗨呦' % (name, name2))
案例
猫眼 top100 的网址有以下特点:
第一页: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
请分别使用三种字符串构建的方法创建所有的请求地址
参考代码
# 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 内置了很多的操作方法可以使用。因为字符串是不可变数据类型,所以所有的操作都是返回新的一个新的对象,不会修改原有的字符串。
字符串能够使用的方法如下:
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
的高级对象)。
案例
"""字符串常用方法"""
>>> 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里面的有用数据
- 去除
标签 - 去除
<br>
标签 - 将每一行都分割出来(列表)
- 合并为文章并打印(字符串)
text = """
二月二,龙抬头。
<br>
<br> 暮色里,小镇名叫泥瓶巷的僻静地方,有位孤苦伶仃的清瘦少年,此时他正按照习俗,一手持蜡烛,一手持桃枝,照耀房梁、墙壁、木床等处,用桃枝敲敲打打,试图借此驱赶蛇蝎、蜈蚣等,嘴里念念有词,是这座小镇祖祖辈辈传下来的老话:二月二,烛照梁,桃打墙,人间蛇虫无处藏。
<br>
<br> 少年姓陈,名平安,爹娘早逝。小镇的瓷器极负盛名,本朝开国以来,就担当起“奉诏监烧献陵祭器”的重任,有朝廷官员常年驻扎此地,监理官窑事务。无依无靠的少年,很早就当起了烧瓷的窑匠,起先只能做些杂事粗活,跟着一个脾气糟糕的半路师傅,辛苦熬了几年,刚刚琢磨到一点烧瓷的门道,结果世事无常,小镇突然失去了官窑造办这张护身符,小镇周边数十座形若卧龙的窑炉,一夜之间全部被官府勒令关闭熄火。
<br>
<br> 陈平安放下新折的那根桃枝,吹灭蜡烛,走出屋子后,坐在台阶上,仰头望去,星空璀璨。
<br>
<br> 少年至今仍然清晰记得,那个只肯认自己做半个徒弟的老师傅,姓姚,在去年暮秋时分的清晨,被人发现坐在一张小竹椅子上,正对着窑头方向,闭眼了。
<br>
<br> 不过如姚老头这般钻牛角尖的人,终究少数。
"""
参考答案
text = text.replace('<br>', "").replace(' ', "")
print(text.split())
print("\n".join(text.split()))
其他方法
"""其他方法"""
>>> 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
>>> hello = "hello world !"
>>> hello.replace('world', 'Python')
'hello Python !'
>>> hello
'hello world !'
字符串是一种不可变的数据类型。所有操作字符的方法都是返回一个新的字符串。可以用返回的新的字符串覆盖掉之前的字符串。
转义字符
在需要在字符中使用特殊字符时,python 用反斜杠转义字符。如下表:
转义字符 | 描述 |
---|---|
\ | (在行尾时)续行符 |
\\ | 反斜杠符号 |
\' | 单引号 |
\" | 双引号 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
案例
"""转义字符"""
# 单、双引号实现跨行
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 路径可直接写成如下这种形式:
# 原始字符串包含的引号,同样需要转义
>>> s2 = r'"Let\'s go", said Charlie'
>>> print(s2)
"Let\'s go", said Charlie
>>> s2
'"Let\\\'s go", said Charlie'