python笔记(14)--内置模块(json重要)
内容目录
- 模块知识
- 内置模块
- time
- datetime
- json(重要)
- 其他
内容回顾&作业题
重要知识点
-
构造字典和函数对应关系,避免重复的if...else
-
a=1 b=2 ==> a , b = b , a
-
装饰器
-
找文件路径
-
脚本参数
-
sys.exit(0)
-
range / xrange
-
读大文件
今日内容
1.模块基本知识
-
内置模块,python内部提供的功能
#示例: import sys print(sys.argv)
-
第三方模块,下载/安装/使用
-
C:\python36\Scripts\pip.exe包管理工具
#把pip.exe 所在的目录添加到环境变量中。环境变量-系统变量-path里面 pip install 要安装的模块名称 #例如 cmd中运行pip install xlrd,该Excel模块就可以用了
-
-
安装时错误:
-
python更改了名字,所以pip需要重新安装。使用命令“python36 -m pip install --upgrade pip”
-
此时pip版本有问题,应升到最近版本,使用此命令python36 -m pip install --upgrade pip
-
网络问题,网速慢获取慢,等网络恢复后重新安装
-
安装好的第三方模块都在C:\python36\Lib\site-packages,可以检查需要安装的模块是否齐全
-
内置模块都在C:\python36\Lib中
-
安装完成后,如果导入不成功。
- 重启pycharm,查看底部进度条,如果没有就重启
- 有可能安装错误,装到本机其他python版本中了
-
-
自定义模块
-
xxxx.py(自己写的模块)
def f1(): print('f1') def f2(): print('f2')
-
x1.py
#调用自定义模块 import xxxx xxxx.f1() xxxx.f2()
-
运行
python x1.py
-
2.内置模块
2.1 os
-
os.mkdir:(创建目录只能生成一级目录)
-
os.makedirs:(创建目录以及子目录)
import os file_path = r'db\xx\xo\exet.txt' #需要写入的文件路径 file_folder = os.path.dirname(file_path) #取上级目录 if not os.path.exists(file_folder): #判断如果没有上级目录,则创建目录 os.makedirs(file_folder) with open(file_path,mode='w',encoding='utf-8')as f: #打开文件写入 f.write('kljljlkj')
-
os.rename:重命名
import os os.rename('db','sb') #将文件夹的名称更改为'sb'
-
os.path.join
-
os.path.dirname
-
os.path.abspath
-
os.path.exists
-
os.stat('文件路径')
-
os.listdir
-
os.walk
2.2 sys
-
sys.argv
-
sys.path:默认python去导入模块时,会按照sys.path中的路径挨个查找。
- sys.path默认路径是当前要执行的文件目录下,如果要执行其他盘符或文件夹的模块,需用到这个功能
- 该功能与from 模块 import 函数相类似,不推荐使用这个,可以用from代替
import sys sys.path.append('D:\\') import oldboy
-
sys是解释器相关的数据:递归次数/引用次数
2.3 json(重要)
json是一个特殊的字符串。【长得像列表/字典/字符串/数字/真假】
通用名词:序列化和反序列化,序列化必须为列表样式的,可以包换其他类型
- 功能是实现对接,对接Java/C++/PHP.....等等,把数据序列化为其他语言可以调用的
- 反序列化:把其他语言传过来的字符串调用成python可读的列表
- json中如果包含字符串必须是双引号
- 必须用列表或字典做序列化
#将python中的列表序列化
import json
v = [12,13,{'k1':456,'k2':'alec'},'crue',True,False]
val = json.dumps(v)
print(val) #结果为 [12, 13, {"k1": 456, "k2": "alec"}, "crue", true, false]
#将其他语言传过来的字符串反序列化
import json
v = '["koper",123,"port"]'
print(type(v)) #结果为<class 'str'>
val = json.loads(v)
print(type(val),val) #结果为 <class 'list'> ['koper', 123, 'port']
JSON的格式反序列化Python的格式 也可反过来序列化
+---------------+-------------------+
| JSON | Python |
+===============+===================+
| object | dict |
+---------------+-------------------+
| array | list |
+---------------+-------------------+
| string | str |
+---------------+-------------------+
| number (int) | int |
+---------------+-------------------+
| number (real) | float |
+---------------+-------------------+
| true | True |
+---------------+-------------------+
| false | False |
+---------------+-------------------+
| null | None |
+---------------+-------------------+
2.4 模块导入步骤
- 先从sys.modules里查看是否被导入
- 如果没有被导入,就依据sys.path路径寻找模块
- 找到了就导入
- 创建这个模块的命名空间
- 执行文件,把文件中的名字都放到命名空间里
import sys
import demo #自己写的模块
print(sys.modules.keys()) #可以查看文件中导入的模块都有哪些
print(sys.path) #导入的模块路径是什么
import os,sys,time,json #可以这么写,但是不建议这么用,后续维护代码成本高,注释模块时改动大
#导入模块时
先导入内置模块
再导入扩展的模块(例如django)
后自定义模块