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)
后自定义模块
posted @ 2020-05-18 11:26  薛定谔的猫儿  阅读(200)  评论(0编辑  收藏  举报