Python个人学习笔记(17):模块(sys、pickle&json)

发布于:2025-03-22 ⋅ 阅读:(24) ⋅ 点赞:(0)

五、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()也是直接处理文件