一、字符串
1、字符串里的转义符
转义字符 |
描述 |
---|---|
(在行尾时) | 续行符 |
\\ | 反斜杠符号 |
\’ | 单引号 |
\" | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\000 | 空 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
\v | 纵向制表符 |
\f | 换页 |
2、字符串的输出
str_1 = "chengdudexiaojiuguan"
print(str_1[:5]) # 显示从开头到第四个
print(str_1 + "是我的") # 字符串拼接
print(str_1 * 3) # 字符串成倍显示
print("Hello\nxiaomeng") # 中间有 \n ,换行
print(r"Hello\nxiaomeng") # 当开头有一个 r , 后面的转义符都不生效,显示原始字符串
--->
cheng
chengdudexiaojiuguan是我的
chengdudexiaojiuguanchengdudexiaojiuguanchengdudexiaojiuguan
Hello
xiaomeng
Hello\nxiaomeng
3、字符串常见操作
str_3 = "12345abcde"
print(str_3.isalnum()) # 字符串中至少一个字符且所有字符包含字母或数字
print(str_3.isalpha()) # 字符全是字母
print(str_3.isdigit()) # 字符全是数字
print(len(str_3)) # 字符串长度
print(','.join(str_3)) # 将 , 加入到str_3字符串中, 即用 , 分割str_3
-->
True
False
False
10
1,2,3,4,5,a,b,c,d,e
函数 | 作用 |
---|---|
lstrip() | 删除字符串左边的空格或指定字符 |
rstrip() | 删除字符串末尾的空格 |
rsplit() | 删除两边的空格,并返回一个列表 |
split() | 拆分成n个字符串 |
二、列表
1、常用操作
操作名称 | 操作方法 | 举例 |
---|---|---|
访问列表中的元素 | 通过下标 | print(list[0]) |
列表切片 | 使用[: :] | list[2:5:2] |
遍历列表 | 通过for循环 | for i in liist: print(i) |
【增】新增数据到列表末尾 | 使用append方法 | list.append(5) |
【增】列表的追加 | 使用entend方法 | list.extend(list_2) |
【增】列表数据插入 | 使用insert方法 | list.insert(1,3) |
【删】列表的删除 | del:通过索引删除指定位置的元素 remove:移除列表中指定值的第一个匹配值, 没找到会抛异常 |
del list[1] list.remove(1) 注意两种方法的区别 |
删除列表尾部的元素 | 使用pop | list.pop() |
【改】更新列表中的数据 | 通过下标原地修改 | list[0] |
【查】列表成员的关系 | in、not in | 2 in list |
列表的加法操作 | + | list3 = list1 + list2 |
【排】列表的排序 | sort方法 | list.sort() |
【排】列表的反转 | reverse | list.reverse() |
增
a = [1, 2]
b = [3, 4]
a.append(b) # 将b列表作为一个元素加入a列表
print(a)
a.extend(b) # 将整个列表插入另一个列表
print(a)
c = [0, 1, 2]
c.insert(1, 5) # 指定下标位置插入元素
print(c)
--->
[1, 2, [3, 4]]
[1, 2, [3, 4], 3, 4]
[0, 5, 1, 2]
删
movelists = ['加勒比海盗', '肖申克的救赎', '教父', '阿甘正传', '战狼2', '复仇者联盟4']
del movelists[2] # 指定位置删除元素
print(movelists)
movelists.pop() # 删除末尾的元素
print(movelists)
movelists.remove('战狼2') # 直接删除指定内容
print(movelists)
--->
['加勒比海盗', '肖申克的救赎', '阿甘正传', '战狼2', '复仇者联盟4']
['加勒比海盗', '肖申克的救赎', '阿甘正传', '战狼2']
['加勒比海盗', '肖申克的救赎', '阿甘正传']
改
girl_lists = ['XiangMei', 'ZhaoXiaomeng', 'SunKaixin', 'LiuJiawen', 'HouRuijuan']
print(girl_lists)
girl_lists[1] = "PingEr" # 修改指定下标的元素
print(girl_lists)
--->
['XiangMei', 'ZhaoXiaomeng', 'SunKaixin', 'LiuJiawen', 'HouRuijuan']
['XiangMei', 'PingEr', 'SunKaixin', 'LiuJiawen', 'HouRuijuan']
查
# 【in, not in】
girl_lists = ['XiangMei', 'ZhaoXiaomeng', 'SunKaixin', 'LiuJiawen', 'HouRuijuan']
name = input("请输入你女朋友的名字:")
if name not in girl_lists:
print("还需努力呀")
else:
print("干的好")
print(girl_lists.index('SunKaixin', 1, 4)) # 在下标1~4范围内查找'SunKaixin',返回下标
三、文件操作
1、文件的打开
使用open函数,可以打开一个一存在的文件,或者创建一个新文件
f = open('text.txt', 'w')
f.close() # 关闭文件
说明:
访问模式 | 说明 |
---|---|
r | 以只读方式打开文件。文件指针会放在文件的开头。这也是默认模式 |
w | 打开一个文件只用于写入。若文件存在则将其覆盖,若不存在则创建新文件 |
a | 打开一个文件用于追加。若文件已存在,文件指针将放在文件末尾。新的内容将放在现存内容之后 若不存在,则创建新文件写入 |
rb | 以二进制格式打开一个文件用于只读。文件指针会放在文件开头。这是默认模式 |
wb | 以二进制格式打开一个文件只用于写入。若文件存在将其覆盖,若不存在则创建新文件 |
ab | 以二进制格式打开打开一个文件用于追加。若文件存在,文件指针放在文件末尾,即新内容会写入到现存内容之后 若文件不存在,创建新文件进行写入 |
r+ | 打开一个文件用于读写。文件指针会放在文件开头 |
w+ | 打开一个文件用于读写。若文件存在将其覆盖,若不存在,创建新文件 |
a+ | 打开一个文件用于读写。若文件存在,文件指针会放在文件末尾。文件打开时会是追加模式。若文件不存在,创建文件用于读写 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件开头 |
wb+ | 以二进制格式打开一个文件用于读写。文件已存在则将其覆盖。文件不存在则创建新文件 |
ab+ | 一二进制格式打开一个文件用于追加。若文件存在,文件指针会放在文件的结尾。若文件不存在,则创建新文件用于读写 |
2、文件写入
# 文件写入
f = open('text.txt', 'w')
text = '''
I heard, that your settled down.
听说 你心有所属
That you, found a girl and your married now.
你遇到了她,即将步入婚姻殿堂
I heard that your dreams came true.
听说你美梦成真
Guess she gave you things, I didn't give to you.
看起来与我相比,她才是最好的
'''
f.write(text) # 将内容写入文件
f.close() # 关闭文件
3、文件读取
# 文件读取 按字符
f = open('text.txt', 'r')
content = f.read(5)
print(content)
content = f.read(10)
print(content)
f.close()
# 文件读取 按行
f = open('text.txt' ,'r')
content = f.readlines() # 一次性读取全部文件为列表,每行一个字符串元素
i = 1
for temp in content:
print("%d:%s" %(i,temp), end="")
i += 1
f.close()
4、文件的其他不太常用的操作
4.1、文件的重命名
os模块中的rename()可以完成对文件的重命名操作
import os
os.rename("text.txt","some_like_you")
4.2、文件删除
os模块中的remove()模块可以对文件完成删除操作
import os
os.remove("text.txt")
四、错误与异常
1、出现异常
open('123.txt', 'r')
--->
Traceback (most recent call last):
File "D:\python3.9\项目1\day20_shixun\demo2\异常处理.py", line 7, in <module>
open('123.txt', 'r')
FileNotFoundError: [Errno 2] No such file or directory: '123.txt'
2、分类捕获异常
try:
print(num)
f = open('123.txt', 'r')
except IOError as e:
print('没找到文件', e)
except NameError as e:
print('输出的东东没有定义', e)
--->
输出的东东没有定义 name 'num' is not defined
3、捕获全部异常
try:
print(num)
f = open('123.txt', 'r')
except Exception as e: # 将所有的错误类型承接到Exception
print('出现错误了', e)
--->
出现错误了 name 'num' is not defined
4、finally输出
name = ['lishang','zhaoxiaomeng']
try:
name[3]
except KeyError as e:
print("没有这个key:",e)
except IndexError as e:
print("超出列表范围:",e)
except Exception as e:
print("出错了,位置错误:",e)
else:
print("一切正常")
finally:
print("不管有没有错误都执行")
五、Python爬虫
1、任务介绍
爬取豆瓣电影Top10的基本信息,包括电影的名称、豆瓣评分、评价数、电影概况、电影链接等。
2、基本流程
准备工作:
通过浏览器查看分析目标网页,学习编程基础规范
获取数据:
通过HTTP库向目标站点发起请求,请求可以包含额外的header等信息,如果服务器能正常响应,会得到一个Response,便是所要获取的页面内容。
解析内容:
得到的内容可能是HTML,Json等格式,可以用页面解析库
、正则表达式
等进行解析。
保存数据:
保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件。
网址链接:https://movie.douban.com/top250
3、引入模块
3.1、补充urllib
对返回的网页源码进行utf-8的解码
import urllib.request
import urllib.parse
import urllib.error
# 获取一个get请求
response1 = urllib.request.urlopen("http://www.baidu.com")
print(response1.read().decode('utf-8'))
# 获取一个 post 请求
data = bytes(urllib.parse.urlencode({
"hello":"world"}), encoding="utf-8")
response2 = urllib.request.urlopen("http://httpbin.org/post", data=data)
print(response2.read().decode('utf-8'))
# 获取一个 get 请求
try:
# 超时处理
response3 = urllib.request.urlopen("http://httpbin.org/get", timeout=0.1)
print(response3.read().decode('utf-8')