第二模块 函数&模块
从现在开始,我们将进入系列课程第二模块的的学习。
第一模块主要是学习python基础知识,从第二模块开始就可以通过程序去解决工作中实际的问题。
从今天开始,我们将进入第二模块的学习,此模块主要包含两大部分:
-
函数,一个用于专门实现某个功能的代码块(可重用)。
-
内置函数
len、bin、oct、hex 等
-
自定义函数
def send_email(): # 写了10行代码,实现了发送邮件。 pass send_email()
# 定义了一个函数,功能代码块 def send_email(): # 写了10行代码,实现了发送邮件。 pass goods = [ { "name": "电脑", "price": 1999}, { "name": "鼠标", "price": 10}, { "name": "游艇", "price": 20}, { "name": "美女", "price": 998} ] for index in range(len(goods)): item = goods[index] print(index + 1, item['name'], item['price']) # 调用并执行函数 send_email() while True: num = input("请输入要选择的商品序号(Q/q):") # "1" if num.upper() == "Q": break if not num.isdecimal(): print("用输入的格式错误") break num = int(num) send_email() if num > 4 or num < 0: print("范围选择错误") break target_index = num - 1 choice_item = goods[target_index] print(choice_item["name"], choice_item['price']) send_email()
-
-
模块,集成了很多功能的函数集合。
-
内置模块,Python内部帮助我们提供好的。
import random num = random.randint(0,19)
import decimal v1 = decimal.Decimal("0.1") v2 = decimal.Decimal("0.2") v3 = v1 + v2 print(v3) # 0.3
-
第三方模块,网上下载别人写好的模块(功能集合)。
-
自定义模块
-
9 .文件操作相关
目标:掌握基于Python对文件相关操作。
概要:
- 文件操作
- 文件夹和路径
- csv格式文件
- ini格式文件
- xml格式文件
- excel文件
- 压缩文件
注意:每种格式包含很多相关操作,大家在学习的过程中只要掌握知识点的用法,参考笔记可以实现相关的练习即可,不必背会(在企业开发过程中也是边搜边实现。
1. 文件操作
在学习文件操作之前,先来回顾一下编码的相关以及先关数据类型的知识。
-
字符串类型(str),在程序中用于表示文字信息,本质上是unicode编码中的二进制。
name = "盖伦"
-
字节类型(bytes)
-
可表示文字信息,本质上是utf-8/gbk等编码的二进制(对unicode进行压缩,方便文件存储和网络传输。)
name = "盖伦" data = name.encode('utf-8') print(data) # b'\xe7\x9b\x96\xe4\xbc\xa6' result = data.decode('utf-8') print(result) # "盖伦"
-
可表示原始二进制(图片、文件等信息)
-
1.1 读文件
-
读文本文件
# 1.打开文件 # - 路径: # 相对路径:'info.txt' # 绝对路径:'D:\PycharmProjects\python_study\info.txt'(注意 windows 下路径建议用 双 \\ 或者 / ) # - 模式 # rb,表示读取文件原始的二进制(r, 读 read;b, 二进制 binary;) # 1.打开文件 file_object = open('info.txt', mode='rb') # 2.读取文件内容,并赋值给data data = file_object.read() # 3.关闭文件 file_object.close() print(data) # b'hello,world' text = data.decode("utf-8") print(text) # hello,world
-
读图片等非文本内容文件。
file_object = open('photo.png', mode='rb') data = file_object.read() file_object.close() print(data) # \x91\xf6\xf2\x83\x8aQFfv\x8b7\xcc\xed\xc3}\x7fT\x9d{.3.\xf1{\xe8\...
注意事项:
-
路径
-
相对路径,你的程序到底在哪里运行的?
-
绝对路径
# 1.打开文件 file_object = open('D:/PycharmProjects/python_study/info.txt', mode='rt', encoding='utf-8') # 2.读取文件内容,并赋值给data data = file_object.read() # 3.关闭文件 file_object.close()
windows系统中写绝对路径容易出问题:
# file_object = open('C:\\new\\info.txt', mode='rt', encoding='utf-8') # \n 换行符, 所以必须使用 \\ 或者 / file_object = open(r'C:\new\info.txt', mode='rt', encoding='utf-8') data = file_object.read() file_object.close() print(data)
-
-
读文件时,文件不存在程序会报错。
Traceback (most recent call last): File "D:/PycharmProjects/python_study/study.py", line 8, in <module> file_object = open('new_info.txt', mode='rb') FileNotFoundError: [Errno 2] No such file or directory: 'new_info.txt'
import os file_path = "D:/PycharmProjects/python_study/new_info.txt" # 判断路径是否存在 exists = os.path.exists(file_path) if exists: # 1.打开文件 file_object = open('new_info.txt', mode='rt', encoding='utf-8') # 2.读取文件内容,并赋值给data data = file_object.read() # 3.关闭文件 file_object.close() print(data) else: print("文件不存在")
1.2 写文件
-
写文本文件
# 1.打开文件 # 路径:t1.txt # 模式:wb(要求写入的内容需要是字节类型) file_object = open("t1.txt", mode='wb') # 2.写入内容 file_object.write("盖伦".encode("utf-8")) # 3.文件关闭 file_object.close()
-
写图片等文件
# 读取名为 a1 的图片 f1 = open('a1.png',mode='rb') content = f1.read() f1.close() # 保存 a1 图片 为 a2 f2 = open('a2.png',mode='wb') f2.write(content) f2.close()
基础案例:
# 案例1:用户注册
user = input("请输入用户名:")
pwd = input("请输入密码:")
data = "{}-{}".format(user, pwd)
file_object = open("files/info.txt", mode='wt', encoding='utf-8')
file_object.write(data)
file_object.close()
# 案例2:多用户注册
# w写入文件,先清空文件;再在文件中写入内容。
file_object = open("files/info.txt", mode='wt', encoding='utf-8')
while True:
user = input("请输入用户名:")
if user.upper() == "Q":
break
pwd = input("请输入密码:")
data = "{}-{}\n".format(user, pwd)
file_object.write(data)
file_object.close()
小高级案例:(超前)
利用Python想某个网址发送请求并获取结果(利用第三方的模块)
下载第三方模块(在终端下运行)
pip install requests
升级 pip 注意事项
# 如果报这个错误的话 ModuleNotFoundError: No module named 'pip' # 执行一下两个命令进行改正修复 python -m ensurepip python -m pip install --upgrade pip
使用第三方模块
import requests # url 网址 res = requests.get(url="http://www.baidu.com") print(res)
# 案例1:去网上下载一点文本,文本信息写入文件。
import os
import requests
res = requests.get(
url="https://book.douban.com/tag/%E9%9A%8F%E7%AC%94",
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
}
)
# 网络传输的原始二进制信息(bytes)
# 获取当前 python文件所在路径
current_path = os.getcwd()
# 拼接路径,并转换路径 \\ 为 /
file_path = os.path.join(current_path, "files").replace("\\", "/")
# 判断文件是否存在,不存在则自动创建
if not os.path.exists(file_path):
os.mkdir(file_path)
# 文件名
file_name = os.path.join(file_path, "data.txt")
file_object = open(file_name, mode='wb')
file_object.write(res.content)
file_object.close()
# 案例2:去网上下载一张图片,图片写入本地文件。
res = requests.get(
url="https://pic.netbian.com/uploads/allimg/210812/234309-1628782989eba1.jpg",
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
}
)
# 网络传输的原始二进制信息(bytes)
# res.content
file_object = open('files/photo.png', mode='wb')
file_object.write(res.content)
file_object.close()
注意事项:
- 路径
- 绝对路径
- 相对路径
- 文件不存在时,w模式会新建然后再写入内容;文件存在时,w模式会清空文件再写入内容。
1.3 文件打开模式
上文我们基于文件操作基本实现了读、写的功能,其中涉及的文件操作模式:rt、rb、wt、wb,其实在文件操作中还有其他的很多模式。
========= ===============================================================
Character Meaning
--------- ---------------------------------------------------------------
'r' open for reading (default)
'w' open for writing, truncating the file first
'x' create a new file and open it for writing
'a' open for writing, appending to the end of the file if it exists
'b' binary mode
't' text mode (default)
'+' open a disk file for updating (reading and writing)
The default mode is 'rt' (open for reading text).
关于文件的打开模式常见应用有:
-
只读:
r
、rt
、rb
(用)- 存在,读
- 不存在,报错
-
只写:
w
、wt
、wb
(用)- 存在,清空再写
- 不存在,创建再写
-
只写:
x
、xt
、xb
- 存在,报错
- 不存在,创建再写。
-
只写:
a
、at
、ab
【尾部追加】(用)- 存在,尾部追加。
- 不存在,创建再写。
-
读写
-
r+、rt+、rb+,默认光标位置:起始位置
file_object = open('info.txt', mode='rt+') # 读取内容 data = file_object.read() print(data) # 写入内容 file_object.write("你好呀") file_object.close()
file_object = open('info.txt', mode='rt+') # 写入内容 file_object.write("vn") # 读取内容 data = file_object.read() print(data) # -123 file_object.close()
-
w+、wt+、wb+,默认光标位置:起始位置(清空文件)
file_object = open('info.txt', mode='wt+') # 读取内容 data = file_object.read() print(data) # 写入内容 file_object.write("你好呀") # 将光标位置重置起始 file_object.seek(0) # 读取内容 data = file_object.read() print(data) file_object.close()
-
x+、xt+、xb+,默认光标位置:起始位置(新文件)
-
a+、at+、ab+,默认光标位置:末尾
file_object = open('info.txt', mode='at+') # 写入内容 file_object.write("盖伦") # 将光标位置重置起始 file_object.seek(0) # 读取内容 data = file_object.read() print(data) file_object.close()
-
多用户注册案例:
while True:
user = input("用户名:")
if user.upper() == "Q":
break
pwd = input("密码:")
data = "{}-{}\n".format(user, pwd)
file_object = open('files/account.txt', mode='a')
file_object.write(data)
file_object.close()
file_object = open('files/account.txt', mode='a')
while True:
user = input("用户名:")
if user.upper() == "Q":
break
pwd = input("密码:")
data = "{}-{}\n".format(user, pwd)
file_object.write(data)
file_object.close()
1.4 常见功能
在上述对文件的操作中,我们只使用了write和read来对文件进行读写,其实在文件操作中还有很多其他的功能来辅助实现更好的读写文件的内容。
-
read,读
-
读所有【常用】
f = open('info.txt'
-