模块
系统模块
常用标准库:
标准库 | 说明 |
---|---|
builtins | 内建函数默认加载 |
math | 数学库 |
random | 生成随机数 |
time | 时间 |
datetime | 日期和时间 |
calendar | 日历 |
hashlib | 加密算法 |
copy | 拷贝 |
functools | 常用的工具 |
os | 操作系统接口 |
re | 字符串正则匹配 |
sys | Python自身的运行环境 |
multiprocessing | 多进程 |
threading | 多线程 |
json | 编码和解码 JSON 对象 |
logging | 记录日志,调试 |
自定义模块
导入模块
import XXX(模块名)
模块名.变量
模块名.函数名()
模块名.类
from — import XXx
from 模块民
__ name__
包
文件夹 +__ init__.py —> 包
包里面存放多个模块
作用:
- 防止命名冲突
- 方便管理
导入:
- import 包名.模块名
- from 包名.模块名 import 具体的类、函数等
循环导入
包的结构
from pack2.moduel_b import testb1
def testa():
print('---->testa start')
# 调用module_b
testb1()
print('--->testa end')
if __name__ == '__main__':
# 调用testa
testa()
from pack1.moduel_a import testa
def testb1():
print('----->pack2 module_b testb1')
def testb2():
print('=====>testb2 start')
# 使用到module_a
testa()
print('=====>testb2 end')
结果:
D:\python\python.exe D:/python-workspace/gp-python-day14/pack1/moduel_a.py
Traceback (most recent call last):
File “D:/python-workspace/gp-python-day14/pack1/moduel_a.py”, line 3, in < module>
from pack2.moduel_b import testb1
File “D:\python-workspace\gp-python-day14\pack2\moduel_b.py”, line 1, in < module>
from pack1.moduel_a import testa
File “D:\python-workspace\gp-python-day14\pack1\moduel_a.py”, line 3, in < module>
from pack2.moduel_b import testb1
ImportError: cannot import name ‘testb1’
-
避免循环导入
- 重构代码
- 将导入语句不放在最上面,放到函数里面(调用处)
- 将导入语句放在__ mian__里面
文件操作
文件:持久化数据
在原先的编程中数据存放在内存中(闪存),程序结束则数据全部销毁,无法保存。
open()
open(file,mode='r',buffering=None,encoding=None,errors=None,newline=None,closefd=True)
file为文件的路径
encoding 编码格式,默认可能与编辑器的编码格式一致,中文应使用utf-8
mode | 用法 |
---|---|
r | open for reading (default) 只读模式,文件不存在则会报错 |
w | 写模式,文件不存在则创建 ps:每次写入将会把原先文件中的数据清空 |
a | 追加模式,与w模式相似,但是不会清空内容,会继续在后面追加 |
b | 二进制模式,与r搭配,可以读一些照片等 |
+ | 将两种模式加载到一块,r+b二进制读,r+w二进制写,可以省略不写 |
图片复制
file_path = r'C:\Users\running\Desktop\GPDay14(模块与文件)\图片\open.png'
with open(file_path, 'rb') as rstream:
content = rstream.read()
# 写入
filename = file_path[file_path.rfind('\\') + 1:]
with open(filename, 'wb') as wstream:
wstream.write(content)
print('复制完成!')
表格处理
'''
文件不是一个图片,文本文件
表格:
excel
数据库导出 ---》 csv
'''
import csv
def write_csv(file_path):
with open(file_path, 'w', newline='') as wstream:
csv_writer = csv.writer(wstream)
# 写东西
csv_writer.writerow(['001', 'xiaohua', 19])
csv_writer.writerow(['002', 'ergou', 20])
csv_writer.writerow(['003', 'xiaoming', 19])
def dictwrite_csv(file_path):
with open(file_path, 'w', newline='') as wstream:
fieldnames = ['sno', 'sname', 'age']
csv_writer = csv.DictWriter(wstream, fieldnames)
# 写东西
csv_writer.writeheader()
csv_writer.writerow({'sno': '001', 'sname': 'xiaohua', 'age': 19})
csv_writer.writerow({'sno': '002', 'sname': 'ergou', 'age': 22})
csv_writer.writerow({'sno': '003', 'sname': 'xiaoming', 'age': 21})
# 读取文件
def csv_read():
with open(file_path, 'r', newline='') as rstream:
csv_reader = csv.reader(rstream)
# 读取内容
for row in csv_reader:
print(row)
def dictcsv_read():
with open(file_path, 'r', newline='') as rstream:
csv_reader = csv.DictReader(rstream)
# 读取内容
for row in csv_reader:
print(dict(row))
file_path = r'C:\Users\running\Desktop\GPDay15(文件与系统模块)\代码\users.csv'
# write_csv(file_path)
# dictwrite_csv(file_path)
dictcsv_read()
序列化
将对象转换为可通过网络传输或可以存储在本地磁盘的数据格式(如:xml、json等特殊格式)的过程叫做序列化;反之,称为反序列化
python的序列化实现:
-
json
- 序列化: dumps dump 加s针对于文件操作,没有太大差别
- 反序列化: loads load pickle
- pickle.dumps(dict1) —> 字节串
- pickle.loads(bytes_object) ----> python 类型
dict1 = {'tianfengli': [{'sno': '001', 'sname': 'xiaohua', 'age': 18, 'status': False},
{'sno': '002', 'sname': 'egou', 'age': 20, 'status': True},
{'sno': '003', 'sname': 'xiaoming', 'age': 18, 'status': False}
],
'beike': [
{'sno': '011', 'sname': 'xiaohua1', 'age': 18, 'status': False},
{'sno': '012', 'sname': 'egou1', 'age': 20, 'status': True},
{'sno': '013', 'sname': 'xiaoming1', 'age': 18, 'status': False}
]
}
import pickle
result = pickle.dumps(dict1)
print(result)
r = pickle.loads(result)
print(r)
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return self.name
stu = Student('xiaohua', 20)
stu1 = Student('ergou', 19)
bobj = pickle.dumps(stu)
print(bobj)
stu = pickle.loads(bobj)
print(stu)
with open('stus.txt', 'wb') as ws:
pickle.dump(stu, ws)
pickle.dump(stu1, ws)
with open('stus.txt', 'rb') as rs:
while True:
try:
content = pickle.load(rs)
print(content)
except:
print('读取完毕!')
break