zoukankan      html  css  js  c++  java
  • 常用模块

    常用模块

    time模块

    该模块内部使⽤用的时当前平台的c库 每个平台的c库⽀支持的⽅方法可能略略有不不同
    时间三种格式
    1.时间戳
    2.本地时间
    3.gm(UTC)世界统⼀一时间


    格式化时间
    time.strftime("")
    print(time.strftime("%Y-%m-%d %H:%M:%S"))
    print(time.strftime("%Y-%m-%d %X"))


    三种时间相互转换
    时间戳转结构化时间 本地
    print(time.localtime(111))
    print(time.localtime(time.time))


    时间戳转结构化时间 UTC
    print(time.gmtime(1111))


    结构化转时间戳

    time.mktime(结构化)

    结构化转格式化
    time.strftime("格式",结构化时间)


    格式化时间转结构化
    time.strptime("2017-10-10","%Y-%m-%d")

    datetime模块

    timedelta模块表示时间差
    包含三个可⽤用名称
    days seconds micreseconds微秒
    ⽀支持加减乘除
    可⽤用⽅方法


    total_secondes
    datetime
    获取当前时间 会根据当前系统时区⾃自动转换 ⽐比较⽅方便便
    print(datetime.datetime.now())
    返回的是时间对象
    对象中包含⼀一些变量量
    年年⽉月⽇日时分秒
    时间对象的减法运算
    ⼀一个时间对象与⼀一个时间差对象timedelta 进⾏行行加减
    print(datetime.datetime.now() +
    datetime.timedelta(days=1,hours=1,minutes=1,seconds=1))
    30天后是⼏几⽉月⼏几号?
    时间对象的替换操作
    replace 可替换某个时间的值

    random模块

    random 模块
    随机数⽣生成模块
    random 0-1 开闭
    randint 0 - 3 开开
    randrange 0 - 3 开闭
    choice [1,2,32,3,2,"哈哈"] 随机选⼀一个
    sample([1,"a",["c","d"]],2) 随机选指定个数
    uniform(1,3) 闭闭 浮点
    shuffle(列列表) 打乱顺序


    练习
    随机验证码:

    import random

    def make_code(limt):
    res = ''
    for i in range(limt):
    n = str(random.randint(0,9))
    l = chr(random.randint(65,90))
    s = random.choice([n,l])
    res += s
    return res
    print(make_code(6))



    sys模块

    sys 模块
    1 sys.argv 命令⾏行行参数List,第⼀一个元素是程序本身路路径
    2 sys.exit(n) 退出程序,正常退出时exit(0)
    3 sys.version 获取Python解释程序的版本信息
    4 sys.maxint 最⼤大的Int值
    5 sys.path 返回模块的搜索路路径,初始化时使⽤用PYTHONPATH环境变
    量量的值
    6 sys.platform 返回操作系统平台名称


    扩展
    脚本执⾏行行时 很多时候需要使⽤用进度条
    如何实现
    print("[###]")
    print("[####]")
    print("[#####]")


    分析:
    中括号位置是固定的变化的是⾥里里⾯面的符号
    格式化替换加占位 print("[%-50s]" % "#")
    ⼈人家的是不不换⾏行行的⼀一直在⼀一⾏行行刷新进度
    实际上是新的内容覆盖了了旧的内容感觉像是动画
    中括号的宽度应该是不不固定的 根据cmd进⾏行行调整 所以当做参数传进来
    于是print("[%-%ds]")
    发现不不⾏行行说你传参数传多了了
    定义为⽅方法
    不不换⾏行行打印 并将光标移动⾄至⾏行行起始

     

    os模块

    os 模块
    os.getcwd() 获取当前⼯工作⽬目录,即当前python脚本⼯工作的⽬目录路路径
    os.chdir("dirname") 改变当前脚本⼯工作⽬目录;相当于shell下cd
    os.curdir 返回当前⽬目录: ('.')
    os.pardir 获取当前⽬目录的⽗父⽬目录字符串串名:('..')
    os.makedirs('dirname1/dirname2') 可⽣生成多层递归⽬目录
    os.removedirs('dirname1') 若⽬目录为空,则删除,并递归到上⼀一级⽬目录,如
    若也为空,则删除,依此类推
    os.mkdir('dirname') ⽣生成单级⽬目录;相当于shell中mkdir dirname
    os.rmdir('dirname') 删除单级空⽬目录,若⽬目录不不为空则⽆无法删除,报错;相
    当于shell中rmdir dirname
    os.listdir('dirname') 列列出指定⽬目录下的所有⽂文件和⼦子⽬目录,包括隐藏⽂文件,
    并以列列表⽅方式打印
    os.remove() 删除⼀一个⽂文件
    os.rename("oldname","newname") 重命名⽂文件/⽬目录
    os.stat('path/filename') 获取⽂文件/⽬目录信息
    os.sep 输出操作系统特定的路路径分隔符,win下为"\",Linux下为"/"
    os.linesep 输出当前平台使⽤用的⾏行行终⽌止符,win下为" ",Linux下为" "
    os.pathsep 输出⽤用于分割⽂文件路路径的字符串串 win下为;,Linux下为:
    os.name 输出字符串串指示当前使⽤用平台。win->'nt'; Linux->'posix'
    os.system("bash command") 运⾏行行shell命令,直接显示
    os.environ 获取系统环境变量量


    os.path模块
    os.path.abspath(path) 返回path规范化的绝对路路径
    os.path.split(path) 将path分割成⽬目录和⽂文件名⼆二元组返回
    os.path.dirname(path) 返回path的⽬目录。其实就是os.path.split(path)的第
    ⼀一个元素
    os.path.basename(path) 返回path最后的⽂文件名。如何path以/或结尾,
    那么就会返回空值。即os.path.split(path)的第⼆二个元素
    os.path.exists(path) 如果path存在,返回True;如果path不不存在,返回
    False
    os.path.isabs(path) 如果path是绝对路路径,返回True
    os.path.isfile(path) 如果path是⼀一个存在的⽂文件,返回True。否则返回False
    os.path.isdir(path) 如果path是⼀一个存在的⽬目录,则返回True。否则返回
    False
    os.path.join(path1[, path2[, ...]]) 将多个路路径组合后返回,第⼀一个绝对路路径之
    前的参数将被忽略略
    os.path.getatime(path) 返回path所指向的⽂文件或者⽬目录的最后存取时间
    os.path.getmtime(path) 返回path所指向的⽂文件或者⽬目录的最后修改时间
    os.path.getsize(path) 返回path的⼤大⼩小
    # normcase ⽤用于将路路规范化 会将⼤大写转为⼩小写 斜杠改为当前系统分隔符
    print(os.path.normcase("\a\b\ABCS"))
    # normpath⽤用于将路路径规范化 不不仅将⾮非法的分隔符替换为合法分隔符 还将
    ⼤大写转为⼩小写 并且会执⾏行行..的回到上⼀一层
    print(os.path.normpath("/a/b/../ABCS"))
    练习 获取项⽬目根⽬目录

    shutil 模块
    ⾮非常简便便的⽂文件操作 压缩包处理理模块
    shutil.copyfileobj 拷⻉贝⽂文件 提供两个⽂文件对象 ⻓长度表示缓冲区⼤大⼩小
    shutil.copyfile(src, dst) 拷⻉贝⽂文件 提供两个⽂文件路路径
    shutil.copymode() 拷⻉贝⽂文件权限 提供两个⽂文件路路径
    shutil.copystat(src, dst) 拷⻉贝⽂文件状态信息 最后访问 最后修改 权限 提供两
    个⽂文件路路径
    shutil.copy(src, dst) 拷⻉贝⽂文件和权限 提供两个⽂文件路路径
    shutil.copy2(src, dst) 拷⻉贝⽂文件和状态信息 提供两个⽂文件路路径
    shutil.ignore_patterns("mp3","*.py")
    shutil.copytree(src, dst, symlinks=False, ignore=None) 拷⻉贝⽬目录
    symlinks默认False将软连接拷⻉贝为硬链接 否则拷⻉贝为软连接
    shutil.rmtree 删除⽬目录 可以设置忽略略⽂文件
    shutil.move(src, dst)


    移动⽬目录和⽂文件
    压缩与解压缩
    shutil 可以打包 但是⽆无法解包 并且打包也是调⽤用tarfile 和 zipFile完成
    解压需要按照格式调⽤用对应的模块
    打包
    shutil.make_archive("test","tar","/Users/jerry/PycharmProjects/package/packa
    ge1")
    import tarfile,zipfile


    zip压缩
    z = zipfile.ZipFile("test.zip","w")
    z.write("sys.py")
    z.write("start.py")
    z.close()


    zip解压
    z = zipfile.ZipFile("test.zip",'r')
    z.extractall("/Users/jerry/PycharmProjects/package/aaa")
    z.close()


    tar压缩
    t = tarfile.open("test.tar","w")
    t.add("start.py")
    t.add("sys.py")
    t.close()


    tar解压
    t = tarfile.open("test.tar")

    t.extractall("aaa/")
    t.close()

    json模块  *****

      pickle产生的数据 只能由python读取  (跨平台性差)
    今后你开发程序不可能就是单机程序 你需要和其他设备 其他平台 交换数据
    一三八四三八零零四三八

    我们需要找到一种通用的数据格式 让各个平台都能识别

    json模块
    用于处理json格式数据的模块
    json 全称 JavaScrip Object Notation js的对象表示法
    所以json能支持的数据类型就是js支持数据类型

    json格式标准
    能存储的有 str int float dic list bool
    案列 要求 数据的最开始和最末尾 必须是{} []
    {"name":"yyh"}

    json是一种通用的数据交换格式 目前主流的语言都能够轻松解析
    注意: 在使用json格式的时候 数据类型必须按照要求来写 并且 不支持python 元祖 True/Flase '' '''


    常用方法
    序列化
    dump 处理文件
    dumps 处理字符串
    反序列化
    load 处理文件
    loads 处理字符串


    将python格式的数据序列化为json格式  python中的任何类型都能被转化为json格式 表现形式不同
    import json
    users = {'name':"音乐会","age":20,"hobbies":("music","movies")}
    print(json.dumps(users))
    json.dump(users,open("users.json","wt",encoding="utf-8"))



    json的反序列化
    jsonstr = json.load(open("users.json","r",encoding="utf-8"))
    print(jsonstr)

    pickle模块

    pickle模块
    作用于序列化
    序列化就是将内存中的数据持久化到硬盘
    回顾 使用文件读写也能完成把数据持久化存储 但是有局限性 当数据比较复杂时用起来就很麻烦
    例如 需要把一个字典存储到硬盘中 先转成字符串 写入 读取为字符串 转为原始的格式

    所以就有了pickle
    1.能将所有python中的数据序列化 int float str dic list tuple set bool
    2.反序列化 将之前序列化的数据 在恢复成python的数据格式

    pickle产生的数据 只能由python读取 (跨平台性差)
    今后你开发程序不可能就是单机程序 你需要和其他设备 其他平台 交换数据
    一三八四三八零零四三八

    我们需要找到一种通用的数据格式 让各个平台都能识别
    users = {"name":"yyh","age":20,"hobbies":["打豆豆","飘"]}
    f = open("a.txt","wt",encoding="utf-8")
    f.write(str(users))
    f.close()

    import pickle

    print(pickle.dumps(users))
    序列化
    f = open("p.txt","wb")
    f.write(pickle.dumps(users))
    f.close()



    # 反序列化
    f = open("p.txt","rb")
    print(type(pickle.loads(f.read())))
    f.close()


    # 序列化
    pickle.dump(users,open("pp.txt","wb"))
    print(pickle.load(open("pp.txt","rb")))

    logging模块

     1. 控制日志级别
    2. 控制日志格式
    3. 控制输出的目标为文件
    logging.basicConfig(filename='access.log',
    format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S %p',
    level=10,
    )

    logging.debug('debug日志')       # 10
    logging.info('info日志')       # 20
    logging.warning('warning日志')    #30
    logging.error('error日志')      #40
    logging.critical('critical日志') #50

    # 1. 能够同时往终端与文件中记录日志
    # 2. 能够修改字符串编码

    八个阶段
     1. logger对象: 负责生产各种级别的日志
     2. filter对象: 过滤日志
     3. handler对象: 控制日志输出目标位置
     4. formmater对象
     5. 绑定logger对象与handler对象
     6. 绑定handler对象与formatter对象
     7. 设置日志级别,有logger对象与handler对象两层关卡,必须都放行最终日志才会放行,通常二者级别相同
     8. 使用logger对象产生日志


    shelve模块
    是什什么
    ⼀一个⽤用于序列列化的模块
    为什什么
    使⽤用pickle 和json 都需要与⽂文件打交道
    为了了更更加⽅方便便⽽而推出的另⼀一种序列列化⽅方式
    怎么⽤用
    1.open
    2.以key-vaue⽅方式进⾏行行存取
    3.close
    总结:
    可以存储python所有基础数据类型
    只需要指定⽂文件名字即可,使⽤用⽅方法与字典类型相同
    其实该模块是对pickle模块的封装 使其更更简单


    XML模块

    什什么是xml
    是⼀一种标记语⾔言(计算机能识别的⽂文本)
    xml有什什么⽤用
    制定了了⼀一种⽂文本书写规范,使得计算机能够轻松识别这些数据 就和python
    ⼀一样
    为什什么不不直接⽤用python语⾔言来进⾏行行传输,计算机识别起来太费劲(语法太
    多,变化太复杂)所以需⼀一种更更加简单的解决⽅方案
    xml语法标准
    ⼀一、任何的起始标签都必须有⼀一个结束标签。
    ⼆二、可以采⽤用另⼀一种简化语法,可以在⼀一个标签中同时表示起始和结束标
    签。这种语法是在⼤大于符号之前紧跟⼀一个斜线(/),例例如<百度百科词条/>。XML
    解析器器会将其翻译成<百度百科词条></百度百科词条>。
    三、标签必须按合适的顺序进⾏行行嵌套,所以结束标签必须按镜像顺序匹配
    起始标签。这好⽐比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有
    的内部括号之前,是不不能关闭外⾯面的括号的。
    四、所有的特性都必须有值。
    五、所有的特性都必须在值的周围加上双引号。
    总结
    xml 是⼀一种数据格式遵循⼀一定书写规范,⽤用于多个平台之
    间的数据交换,和json的作⽤用是⼀一样的

     标签的组成
    <tagname attributename="value"> text <subtags/> </tagname>
    2.数据解析(拿到想要的数据)
    3.代码⽣生成xml⽂文档

    数据准备
    <?xml version="1.0"?>
    <data>
    <country name="Liechtenstein">
    <rank updated="yes">2</rank>
    <year>2008</year>
    <gdppc>141100</gdppc>
    <neighbor name="Austria" direction="E"/>
    <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
    <rank updated="yes">5</rank>
    <year>2011</year>
    <gdppc>59900</gdppc>
    <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
    <rank updated="yes">69</rank>
    <year>2011</year>
    <gdppc>13600</gdppc>
    <neighbor name="Costa Rica" direction="W"/>
    <neighbor name="Colombia" direction="E"/>
    </country>
    </data>



    configparser模块

    配置⽂文件解析模块
    何为配置⽂文件?
    运⾏行行程序时⼀一些参数需要⽤用户来决定,这些参数称之为配置信息,配置信息
    通常就放在⼀一个⽂文件中
    为什什么要配置⽂文件?
    ⼀一些参数我们不不能再代码中写死,这样扩展性太低,修改需求时必须修改源
    代码,太麻烦
    配置⽂文件主要内容
    section
    option
    常⽤用⽅方法
    read
    sections
    options
    set
    get
    总结:配置⽂文件是⾮非常常⽤用的程序扩
    展⽅方法,其实使⽤用起来⾮非常简单


    hashlib模块

    hash是⼀一种算法 ,会根据数据提取⼀一段特征码,
    特点:如果数据相同hash结果必然相同,⼀一旦元数据改变,hash结果必然不不同,从
    原理理来看,hash结果⽆无法被反解
    不不同的元数据可能得到相同的hash值
    使⽤用场景
    1.密码校验
    2.⽂文件校验
    破解密码? 不不可能
    撞库原理理
    模拟撞库
    如何防⽌止撞库
    加盐
    使⽤用hmac

    re模块

    RE是什么
    正则 表达 式子
    就是一些带有特殊含义的符号或者符号的组合
    它的作用是对字符串进行过滤
    在一堆字符串中找到你所关心的内容
    你就需要告诉计算机你的过滤规则是什么样 通过什么方式来告诉计算机 就通过正则表达式
    第一步 学习正则表达式 各种符号所表示的含义
    re模块的内部实现 不是python 而是调用了c库

    import re
    res=re.match(r'ab','abc')
     print(res.group())

    非换行 单个任意字符 .
    res=re.match(r'.','bc')
    print(res.group())

    字符集(单个) [...] [abc] [w]
    res=re.match(r'[a-z]','zabc')
    print(res.group())

    W 非w得所有字符

    开头 结尾(只适用于单行匹配) ^ $
    tc='''abc
    123
    ald
    '''
    res=re.match(r'^a',tc)
    print(res.group())

    macth 不与$结合使用
    search 可以与$结合
    tc='''abc
    123
    ald
    '''
    res=re.search(r' $',tc)
    print(res)



    res=re.match(r'^a[w]c$','abc')
    print(res)


    次数
    * 0或无限次(贪婪匹配)
    + 1或无线次
    ? 0或1次
    *? 尽可能少的匹配 0次
    +? 尽可能少的匹配 1次
    ?? 尽可能少的匹配 0次
    res=re.match(r'ab*','abbbbbbbbbb')
    print(res)

    {n} 匹配次数 {m,n} 匹配m次或n次
    res=re.match(r'ab{2,5}','abbbbbbb')
    print(res)

    res=re.match(r'ab{2,5}?','abbbbbbb')
    print(res)

    或 | a|b==[ab]
    res=re.match(r'a|b','abc')
    print(res)


    方法
    match 从头开始 匹配一次
    search 匹配一次 无关位置 从前往后索引匹配
    findall 从前往后索引匹配 匹配所有 返回列表
    sub 替换目标字符串 不修改目标字符串 返回替换后的字符串
    split

    import re

    ts = 'abcdes'
    res=re.sub(r'12','呵呵','ab12es')
    print(res)


    分组
    分组不影响匹配结果 (a(bc)d(efg)) ==>abcdefg
    import re
    reg = '(a(bc)d(efg))'
    ts = 'abcdefg'
    res = re.match(reg,ts)
    print(res.group()) #abcdefg
    print(res.group(0)) #abcdefg
    print(res.group(1)) #abcdefg
    print(res.group(2)) #bc
    print(res.group(3)) #efg



    subprocess模块
    subprocess模块
    sub 子
    process 进程
    什么是进程
    正在进行中的程序 每当打开一个程序就会开启一个进程
    每个进程包含运行程序所需的所有资源
    正常情况下 不可以跨进程访问数据
    但是有些情况写就需要访问别的进程数据 提供一个叫做管道的对象 专门用于跨进程通讯

    作用:用于执行系统命令

    常用方法
    run 返回一个表示执行结果的对象
    call 返回的执行的状态码

    总结 subprocess的好处是可以获取指令的执行结果
    subprocess执行指令时 可以在子进程中 这样避免造成主进程卡死





  • 相关阅读:
    linux安装 Android Studio详细教程,支持性较差,需要安装最新底层库内核的linux
    QT、QTE、qtopia区别
    Sublime Text 有哪些使用技巧
    华为5700交换机通过外部开源protal和本地aaa用户认证的一些问题
    离奇“undefined reference”错误分析与解决方案
    GNU工具链学习笔记
    gcc和ld 中的参数 --whole-archive 和 --no-whole-archive
    揭开Linux操作系统的Swap交换区之谜
    invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause
    学习JavaScript
  • 原文地址:https://www.cnblogs.com/zhangpang/p/9469597.html
Copyright © 2011-2022 走看看