模块(总)

  • 对于range py2,与py3的区别:

    • py2:range() 在内存中立即把所有的值都创建,xrange() 不会再内存中立即创建,而是在循环时边环边创建.
    • py3:range() 不会再内存中立即创建,而是在循环时边环边创建.
  • 对于包的定义py2与py3的区别:

    SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
    • 包内py2内文件夹中必须有_ _ init _ _ .py
    • py3中不需要
    • 建议所有的包内全部加上_ _ init _ _ .py文件
  • sys.exit() 退出程序

  • 函数书写时一定要写注释

  • 复杂代码写注释

  • 构造字典和函数的对应关系,避免重复冗余的if ellse

  • a=1
    b=2
    a,b=b,a#ab值交换
  • random

    print( random.randint(1,10) )        # 产生 1 到 10 的一个整数型随机数  
    print( random.random() )             # 产生 0 到 1 之间的随机浮点数
    print( random.choice('tomorrow') )   # 从序列中随机选取一个元素
    print( random.randrange(1,100,2) )   # 生成从1到100的间隔为2的随机整数

模块基本知识

1.模块分类

  • 内置模块 : py内部提供的功能,直接使用

    import sys
    sys.argv()
  • 第三方模块 : 需要从第三方下载/安装使用

    #https://pypi.org/
    'pip.exe路径' pip install 需要安装模块的名称         #执行命令
  • 自定义模块:根据需求自我定义模块

    1. 创建文件 file.py
    2. 导入模块 impoort file
    3. 运行模块

2.内置模块(类库)

  • 常用内置模块:json/time/ /os/sys
  • 模块(类库)可以是py文件,也可以是文件夹
  • 定义模块时可以把一个py文件或一个文件夹(包)当做一个模块,方便调用

2.1 os模块

  • os.mkedirs() 创建目录和子目录
  • os.rename(a,b) 重命名
  • os.path.jion(a,b) 连接路径
  • os.path.dirname() 文件上一层目录
  • os.path.abspath() 绝对路径
  • os.path.exists() 路径是否存在
  • os.stat().st_size 判断文件大小
  • os.listdir() 查看路径内存在文件
  • os.walk() 查看路径内所有层级文件

2.2 sys模块

  • sys.argv(索引) 取用户输入参数
  • sys.path 默认python取导入模块时,会按照sys.path指定的文件夹去寻找
    • sys.path.append('目录'), 添加自定义模块读取目录

2.3 json / pickle模块

json =鸡哥的儿子
鸡哥的儿子是字符串,头衔是:翻译官,擅长翻译列表和字典形式
有两个特殊功能:序列化【dumps】(给别人用)反序列化【loads】(拿来自己用 )
  • json 是一个特殊的字符串(长得像列表/字典/字符串/数字混合)

  • json.dumps() 序列化:将列表/字典/字符串/数字转化为json格式的字符串

  • json.loads() 反序列化:序列化的逆向操作

  • json格式要求:

    • 只能包含int/ str/ list/ dict/ bool 不存在元组/集合
    • 最外层必须是一个列表或字典
    • 在json中如果有字符串,必须是双引号"json中的字符串"
    • 真假小写true/false
  • 字典或者列表中存在中文,序列化的时候或转为UNcode格式,如果想保存中文就需要进行以下操作

    v1=[1,2,3,4,'2','大牛']
    val = json.dumps(v1,ensure_ascii=False)
    print(val)     #[1, 2, 3, 4, "2", "大牛"]
  • json:有点:所有语言通用,缺点:只能序列化部分数据类型;

  • pickle;可以序列化多有数据,但是序列化之后只有python识别

2.4 time/datetime模块

  • 共有24个时区,每个时区相差一个小时
2.4.1 time模块
  • time.time() 时间戳stamp 1970-1-1 00:00到现在的秒数

    • UTC/GMT :世界时间
    • 本地时间
    #小拓展:1970年1月1日 算 UNIX 和 C语言 生日。 由于主流计算机和操作系统都用它,其他仪器,手机等也就用它了。
    #UNIX系统认为1970年1月1日0点是时间纪元,所以我们常说的UNIX时间戳是以1970年1月1日0点为计时起点时间的。
  • time.sleep('秒数') 等待秒数

  • 注意要点:

    15555555555243289...
    55555534232214324...
    #看到这种需要想到是不是戳
2.4.2 datetime模块
  • 获取datetime格式时间

    • datetime.now() 获取当前本地时间
    • datetime.utcnow() 获取当前utc时间
  • 把datetime格式转换成字符串

    • .strftime()
    from datetime import datetime
    t1 = datetime.utcnow()
    print(t1,type(t1))        #2019-04-18 07:41:58.725352 <class 'datetime.datetime'>
    val = t1.strftime('%Y-%m-%d %H-%M-%S')
    print(val)    #2019-04-18 07:48:35
    
  • 把字符串格式的转化为datetime类型

    • datetime.strptime()

      from datetime import datetime
      val = t1.strptime('2019-04-18','%Y%m%d')
      print(val)  #2019-04-18 00:00:00
      
  • 应用场景:

    • 时间加减
    from datetime import datetime,timezone,timedelta
    t1= datetime.strptime('2017-9-9','%Y-%m-%d')
    t2= t1 +timedelta(days=11)
    print(t2)  #2017-09-20 00:00:00
    
  • 时间戳与datetime的关联

    • 时间戳转datetime

      • datetime.fromtimestamp(t)
      from datetime import datetime,timezone,timedelta
      t1 = time.time()
      val = datetime.fromtimestamp(t1)
      print(val)
      
    • datetime转时间戳

      • .timestamp()
      from datetime import datetime,timezone,timedelta
      t1 = datetime.now()
      val = t1.timestamp()
      print(val)
      

2.5 shutil模块

  • shutil.rmtree() 删除目录

  • shutil.move(a,b) 重命名文件或者目录

  • shutil.make_archive("压缩后的文件名称","压缩格式","要压缩的文件绝对路径") 压缩文件

    shutil.make_archive('zzh','zip','D:\code\s21day16\lizhong')
    
  • shuti.unpack_archive("要解压文件名称",路径"要解压到的路径",,格式)路径不存在则创建

    shutil.unpack_archive('zzh.zip',extract_dir=r'D:\code\xxxxxx\xxxx',format='zip')
    

2.6 logging模块(欠)

3.模块调用

  • 在那个文件里运行代码时,系统会自动把文件所在目录下的文件夹和文件自动加载到内存

  • 导入模块(第一种)

    • import 模块名称
    • 调用: 模块名称.函数()
    • 代码从上到下运行,遇见导入的模块时,立即执行导入的模块
  • 导入模块(第二种)

    • from 模块名称 import 函数名 , 函数名 as 别名 #导入部分函数,as可以在函数名重复时起别名

    • from 模块名称 import * #导入模块全部函数

    • from 模块.模块.模块 import 函数名称

    • 调用: 函数名/别名()

      # 导入模块
      from lizhongwei import func,show
      from lizhongwei import func
      from lizhongwei import show
      from lizhongwei import *
      func()
      

调用小结:

  • 模块和要执行的py文件在同一目录,需要模块中很多个功能,推荐使用import 模块
  • 其他推荐from模式导入

异常处理:

try:

​   操作

except Exception as e:

​   print('操作异常')
#示例
def func(a):
    try:
        return a.strip()
    except Exception as e:
        pass
    return False
v = func('alex')
if not v:
    print('函数执行失败')
else:
    print('结果是',v)

总结:

函数高级 5*

  • 嵌套
  • 装饰器

模块分类和定义 4*

  • 内置模块
    • os
    • sys
    • json/pckle
    • time
    • datetime
    • shutil
  • 第三方
    • requests
    • xlrd
  • 自定义模块
    • 文件
    • 文件夹 + init.py【包】

导入模块

  • sys.path
  • 导入
    • import
    • from xx.xxx import xx
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄