Python个人学习笔记(17):模块(sys、picklejson)
五、sys模块
sys.exit():退出
while 1:
print(123)
sys.exit(0)
# 程序退出,0是正常退出,1是非正常退出,记录在日志中
sys.version:得到当前解释器的运行环境
sys.platform:运行平台,win32=windows
代码:
print(sys.version)
print(sys.platform)
结果:
3.13.0 (tags/v3.13.0:60403a5, Oct 7 2024, 09:38:07) [MSC v.1941 64 bit (AMD64)]
win32
sys.path:Python用来搜索模块的,是内部的环境变量
Python在import模块的时候,解释器是根据sys.path中给出的路径进行查找的
不是固定的,是随动的,会根据运行的py文件进行动态变化
导入的模块的路径有可能是pycharm添加的,代码移动到linux中可能会出现运行不通畅的情况,需要把sys.path补全
代码:
print(sys.path)
结果:
['D:\\PycharmProjects\\樵夫老师Python零基础课程\\4_模块', 'D:\\PycharmProjects', 'D:\\Study Material\\PyCharm 2024.3.4\\plugins\\python-ce\\helpers\\pycharm_display', 'C:\\Users\\Lee\\PycharmProjects\\PythonProject2\\.venv\\Scripts\\python313.zip', 'D:\\Study Material\\Python 3.13.0(64bit)\\DLLs', 'D:\\Study Material\\Python 3.13.0(64bit)\\Lib', 'D:\\Study Material\\Python 3.13.0(64bit)', 'C:\\Users\\Lee\\PycharmProjects\\PythonProject2\\.venv', 'C:\\Users\\Lee\\PycharmProjects\\PythonProject2\\.venv\\Lib\\site-packages', 'D:\\Study Material\\PyCharm 2024.3.4\\plugins\\python-ce\\helpers\\pycharm_matplotlib_backend', 'D:\\Study Material\\PyCharm 2024.3.4\\plugins\\python-ce\\helpers\\pycharm_plotly_backend']
结果是sys.path的搜索范围
在导入某一个模块时,会自动找sys.path,如果模块不在以上的搜索范围内,那么程序会报错
sys.path.append(“路径”):引入额外的搜索路径,特殊情况下,需要手动增加,比如在linux上运行程序
sys.path = []:置空搜索范围
sys.argv:接收程序运行时的命令行参数
六、pickle&json
用于序列化
(一)pickle
把对象打散成字节进行存储,这一过程叫序列化
dumps():把对象处理成字节,序列化
代码:
arr = [11,22,33]
bs = pickle.dumps(arr)
print(bs)
结果:
b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00]\x94(K\x0bK\x16K!e.'
保存并查看
代码:
with open('arr.dat',mode='wb') as f:
f.write(bs)
结果:
反序列化:还原数据
loads():把字节还原回对象,反序列化
代码:
f = open('arr.dat',mode='rb')
content = f.read()
print(content)
# 还原成正常的对象
r = pickle.loads(content)
print(r)
结果:
[11, 22, 33]
pickle.load()和pickle.dump()直接操作文件,用得不多
pickle处理的都是字节
(二)json
把对象处理成json字符串,进行存储或传输
早期,xml是作为前后端数据传输的数据格式,难以解析
json更好解析,有些类似于字典
json的概念是web前端的概念,是JavaScript的概念,本质是一个字符串
json是Python提供的一个模块,是专门处理json字符串的。
引入一个字典
dic = {
"name":True,
"age":None,
"wife":{
"name":"章子怡",
"hobby":False
}
}
查看他的类型
代码:
print(type(dic))
结果:
<class 'dict'>
json.dumps(dic):把Python字典序列化成json字符串
代码:
s = json.dumps(dic)
print(s)
结果:
{"name": true, "age": null, "wife": {"name": "\u7ae0\u5b50\u6021", "hobby": false}}
结果是ascii码的形式,需要解码
代码:
s = json.dumps(dic,ensure_ascii=False)
print(s)
结果:
{"name": true, "age": null, "wife": {"name": "章子怡", "hobby": false}}
Python的语法和JavaScript不一样,True-true,False-false,None-null
查看类型
代码:
print(type(s))
结果:
<class 'str'>
字符串便于数据传输,不便于取值
json.loads():json字符串还原成字典
代码:
s1 = '{"name": true, "age": null, "wife": {"name": "章子怡", "hobby": false}}'
dic1 = json.loads(s1)
print(dic1)
print(type(dic1))
结果:
{'name': True, 'age': None, 'wife': {'name': '章子怡', 'hobby': False}}
<class 'dict'>
dump()和load()也是直接处理文件