• 5-1模块


    模块
    1,定义
    模块:逻辑上组织python代码(变量,函数,类,逻辑:实现功能),.py结尾的python文件
    文件名:test.py 模块名:test

    2,导入方法
    调用 在相同目录下
    import 模块名 #import 模块1,模块2,模块3
    #当前下有目录 from 目录名 import 模块名
    #少用 #from 模块 import * #把模块所有代码导入 函数1,函数2
    #用的少 print(模块名.变量名)
    模块名.函数名() #调用

    from 模块 import 模块下的函数名 as 函数别名(虚数名_模块名) #防止冲突
    函数名() #调用

    3,import 本质
    导入模块把python文件解释一遍 (模块名=模块运行结果)
    import 模块名 #运行模块代码 结果给模块名(函数名=函数结果)
    from 模块 import 模块下的函数名 #运行一次模块下的函数名

    包: 本质是目录(必须带有一个__init__.py文件)
    组织模块。 所有模块所在的文件夹
    导入包:本质运行一次包下的__init__.py文件
    导入的#搜索路径 #import sys #sys.path
    附近目录#import os #上级目录ml=os.path.dirname(os.path.dirname(os.path.abspath(__file__))
    #写入搜索路径中 sys.path.append(ml)
    导入包
    import 包名
    #__init__ 文件 #import 模块名 #模块名=模块运行结果
    导入 from . import test1 #在所有目录下,运行一下test1

    4,优化
    多次调用模块下的函数名
    from 模块名 import 函数名

    5,模块的分类
    a,标准库
    b,开源模块
    c,自定义模块

    a,标准库
    #时间模块 time,datatime
    显示时间,日期,时间戳1970年1月1日,秒
    import time
    time.asctime() #'Tue Dec 12 13:17:02 2017'
    时间戳
    time.time()#结果是秒。除3600/24/365 时间戳1970-01-01 + 是今年
    格式化输出
    元组(9个元素)
    time.localtime()#本地,年,月,日,时,分,秒,一周第几天,一年中第几天,时区
    time.gmtime()#UTC+8时区
    显示日期 >>> a=time.localtime() >>> time.strftime('%Y-%m-%d %H:%M:%S',a)
    time.sleep(2) #暂停2秒
    日期转换秒
    time.strptime("2016/05/22","%Y/%m/%d") #转换元组
    time.mktime(time.strptime("2017/12/12","%Y/%m/%d")) #日期转换成秒

    import datetime
    datetime.datetime.now() #当前时间
    datetime.datetime.now() + datetime.timedelta(3) #当前时间+3天后的时间 -3
    datetime.datetime.now() + datetime.timedelta(hour=3)#当前时间+3小时后的时间
    datetime.datetime.now() + datetime.timedelta(minutes=3)#当前时间+3分钟后的时间

    + + + + + + + + + + + + +
    #随机模块 random
    #取随机数值,洗牌,验证码
    import random
    random.random() #随机生成0-1之间的随便数
    print(random.randint(1,99)) #随机生成1-100的整数(包含1和99)
    random.randrange(1,3) #随机生成(1,2)不包含3
    random.choice('abcdefg') #随机从()内取值 [1,2] ('abc',2)随机取2位
    random.uniform(1,3) #随机取1-3间的浮点数

    #洗牌功能
    a=[1,2,3,4,5]
    random.shuffle(a);print(a)

    ###验证码
    #随便生成4个数字
    import random
    a=''
    for i in range(4):
    b=random.randint(1,9)
    a+=str(b)
    print('验证码:随机生成4个数字: ',a)

    #验证码 随机生成4个验证码
    import random
    a=''
    for i in range(4):
    b=random.randrange(0,4)
    if b == i:
    c=random.randint(0,9)
    else:
    c=chr(random.randint(65,90)) #chr(数字转成数字) 65-90 A-Z
    a+=str(c)
    print('验证码:随机生成A-Z,0-9之间的数: ',a)

    #OS模块 系统模块
    #系统的操作命令
    os.getcwd() 获取当前工作目录
    os.chdir(r"d: jpython") 改变当前脚本工作目录; 或 ("D:\rj")
    os.curdir 返回当前目录: ('.')
    os.pardir 获取当前目录的父目录字符串名:('..')
    os.makedirs('目录1/目录2') 可生成多层递归目录
    os.removedirs('空目录/空目录') 若目录为空,则删,并递归到上级目录,如也为空,则删,依此类推
    os.mkdir('目录1') 生成单级目录
    os.rmdir('空目录') 删除单级空目录
    os.listdir('.') 列出指定目录下的所有文件和子目录,包括隐藏文件 ('..')('c:')
    os.remove() 删除一个文件
    os.rename("oldname","newname") 重命名文件/目录名或文件名
    os.stat('path/filename') 获取文件/目录信息
    os.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    os.linesep 输出当前平台使用的行终止符,win下为" ",Linux下为" "
    os.pathsep 输出用于分割文件路径的字符串
    os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
    os.system("bash command") =DOS命令 弹窗显示运行命令("mstsc")远程
    os.environ 获取系统环境变量
    os.path.abspath(path) 获取绝对路径 ('.')当前
    os.path.split(path) 将path分割成目录和文件名二元组返回 (r'c: jpythonpython.exe')
    os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
    os.path.basename(path) 返回path最后的文件名。如何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[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    (r'c:',r' j',r' jpython') #中间的被忽略
    os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
    os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间

    #sys模块
    sys.argv 命令行参数List,第一个元素是程序本身路径 读取参数sys.argv 1 2 3 类似$1 $2
    sys.exit(n) 退出程序,正常退出时exit(0)
    sys.version 获取Python解释程序的版本信息
    sys.maxint 最大的Int值
    sys.path 返回模块的搜索路径,环境变量路径
    sys.platform 返回操作系统平台名称

    #shutil模块
    #复制,删除,移动,压,解
    #复制 a.txt 复制成 b.txt
    import shutil

    # def copyfileobj(fsrc,fdst,length=16*1024):
    # #(旧文件,新文件,一次复制多少)
    # while 1:
    # buf = fsrc.read(length)
    # if no buf:
    # break
    # fdst.write(buf)

    f1=open('a.txt',encoding='utf-8')
    f2=open('b.txt','w',encoding='utf-8')
    shutil.copyfileobj(f1,f2)
    #复制
    shutil.copyfile('文件1','文件2') #文件1 复制成 文件2
    shutil.copymode('文件1','文件2') #只拷贝内容,用户,组,权现不变
    shutil.copystat('文件1','文件2') #拷贝所有信息
    shutil.copytree('源目录','新目录')#拷贝目录加文件
    #删除
    shutil.rmtree('目录') #删除目录+文件
    #移动文件 改名
    shutil.move('旧文件', '新文件')
    #压缩
    shutil.make_archive(a.zip或d:a.zip,压缩种类('zip'),被压的文件名(完整路径))
    import zipfile ; a=zipfile.ZipFile("a.zip",'w')
    a.write('被压的文件1');a.write('被压的文件2');a.close
    #解压
    import zipfile ; b= tarfile.open('a.zip','r'); b.extractall()#可设解压地址;b.close()

    #序列化模块json,pickle
    json,字符串和python数据类型间进行转换 #数据序列化(把字典转字符串)字典不能直接存文件
    #解决不同平台的数据交换
    pickle,用于python特有的类型 和 python的数据类型间进行转换
    #支持所有的python类型
    Json模块提供了四个功能:dumps、dump、loads、load
    pickle模块提供了四个功能:dumps、dump、loads、load

    import pickle
    a={'a':1,'b':2}
    c=pickle.dumps(a)
    print(c)
    with open('a.txt','w') as fp:
    pickle.dump(a,fp)

    import json
    c=json.dumps(a)
    print(c)

    with open('b.txt','w') as fp:
    json.dump(a,fp)

    #shelve模块
    #简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
    #写 #会创建3个文件
    import shelve
    d = shelve.open('shelve_test') #打开一个文件
    class Test(object):
    def __init__(self,n):
    self.n = n
    t = {'a':1,'b',2}
    t2 = Test(123)
    name = ["alex","rain","test"]
    d["test"] = name #持久化列表
    d["t1"] = t #持久化类
    d["t2"] = t2
    d.close()
    #读
    import shelve
    d = shelve.open('shelve_test') #打开一个文件
    print(d.get('test'))
    print(d.get('t'))

    #xml模块
    xml是实现不同语言或程序之间进行数据交换的协议,现在用的少了。因为复杂
    #xml文件 解析成 python
    import xml.etree.ElementTree as ET #起个别名ET
    tree = ET.parse("xmltest.xml") #要处理的文件名
    root = tree.getroot() #root是内存地址
    print(root.tag) #显示标签名

    #遍历xml文档
    for child in root:
    print(child.tag, child.attrib)
    for i in child:
    print(i.tag,i.text)
    #只遍历year 节点
    for node in root.iter('year'):
    print(node.tag,node.text)

    #修改和删除xml文档内容
    import xml.etree.ElementTree as ET
    tree = ET.parse("xmltest.xml")
    root = tree.getroot()
    #修改
    for node in root.iter('year'):
    new_year = int(node.text) + 1
    node.text = str(new_year)
    node.set("updated","yes")
    tree.write("xmltest.xml")
    #删除
    for country in root.findall('country'):
    rank = int(country.find('rank').text)
    if rank > 50:
    root.remove(country)
    tree.write('output.xml')
    #自定义
    import xml.etree.ElementTree as ET
    new_xml = ET.Element("namelist")
    name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
    age = ET.SubElement(name,"age",attrib={"checked":"no"})
    sex = ET.SubElement(name,"sex")
    sex.text = '33'
    name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
    age = ET.SubElement(name2,"age")
    age.text = '19'

    et = ET.ElementTree(new_xml) #生成文档对象
    et.write("test.xml", encoding="utf-8",xml_declaration=True)

    ET.dump(new_xml) #打印生成的格式

    #PyYAML 做配置文件的
    http://pyyaml.org/wiki/PyYAMLDownload
    #configparser模块 用于生成和修改常见配置文档
    http://www.cnblogs.com/alex3714/articles/5161349.html
    #hashlib模块
    用于加密相关的操作,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
    ---检测网站是否被篡改--- 下载MD5比对

    #加密 MD5
    import hashlib
    m = hashlib.md5()
    m.update(b"Hello") #加密Hello
    m.update(b"It's me") #加密HelloIt's me
    print(m.digest()) #2进制格式hash
    m.update(b"It's been a long time since last time we ...")
    print(m.digest()) #2进制格式hash
    print(len(m.hexdigest())) #16进制格式hash
    --- MD5加密 ---
    hash = hashlib.md5()
    hash.update('admin') #加密码admin
    print(hash.hexdigest()) #16进制格式hash

    # ######## sha256 ########
    hash = hashlib.sha256()
    hash.update('admin')
    print(hash.hexdigest())

    # ######## sha512 ########
    hash = hashlib.sha512()
    hash.update('admin')
    print(hash.hexdigest())

    #消息加密码 速度快
    import hmac
    h = hmac.new(b'nihao','中文'.encode(encoding='utf-8'))
    print('16进制的加密',h.hexdigest())

    import hashlib
    h1 = hashlib.md5()
    h1.update('中文'.encode(encoding='utf-8'))
    print('16进制的加密2',h1.hexdigest())

    #re模块
    正则表达式符号 动态模糊匹配 用来匹配字符串 多条件匹配
    import re
    re.match('a','as') #从首字母开始匹配。匹配第一个,匹配即停止(r'\','ab\c)匹配\
    re.search('a','cat') #匹配所有。只匹配第一个,匹配即停止
    re.findall('a','abacad')#匹配所有。匹配多个符合条件的
    re.split('[0-9]+','12ac99cc') #结果['ac','cc'],按数字分隔成列表
    re.sub("[0-9]+",'-','ab11ac') #结果'ab-ac',把数字替换为-

    '.' 默认匹配除 之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
    re.search('a.','cat') #匹配a出现1次或0次。
    '^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a"," abc eee",flags=re.MULTILINE)
    re.search('^a','abc') #匹配a开头的字母
    '$' 匹配字符结尾,或e.search("foo$","bfoo sdfsf",flags=re.MULTILINE).group()也可以
    re.search('t$','cat') #匹配t结尾的字母
    '*' 匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 结果为['abb', 'ab', 'a']
    re.search('ab8','acnihao') #匹配b出现0次或多次的字符
    '+' 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
    re.search('ab+','abbdni') #匹配b出现1次或多次的字符
    '?' 匹配前一个字符1次或0次
    re.search('ab8','acnihao') #匹配b出现0次或1次的字符
    '{m}' 匹配前一个字符m次
    re.search('ab{2}','abbnihao') #匹配b出现2次的字符 ('(ab){2}','ababcc')#ab两次
    '{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
    re.search('(ab){1,3}','ababno') #匹配ab出现1-3次的字符
    '|' 匹配|左或|右的字符
    re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
    '(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c

    'A' 只从字符开头匹配,re.search("Aabc","alexabc") 是匹配不到的
    '' 匹配字符结尾,同$
    'd' 匹配数字0-9
    'D' 匹配非数字
    'w' 匹配[A-Za-z0-9]
    'W' 匹配非[A-Za-z0-9]
    's' 匹配空白字符、 、 、 , re.search("s+","ab c1 3").group() 结果 ' '
    #匹配 空格,换行,回车,tab键( )

    '(?P<name>...)' 分组匹配
    re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143633").groupdict("city")
    结果{'province': '3714', 'city': '81', 'birthday': '1993'}

    re.search("(?P<id>[0-9]+)","abc123")
    #匹配数字
    re.search("(?P<id>[0-9]+)","abc123").group()
    #只显示匹配到的数字
    re.search("(?P<id>[0-9]+)","abc123").groupdict()
    {'id':'123'} #显示字典
    re.search("(?P<id>[0-9]+)(?P<name>[a-zA-Z]+)","abc123xyz12").groupdict()
    {'id':'123','name':'xyz'} #显示字典
    re.search("(?P<id>[0-9]+)(?P<name>[a-zA-Z]+)","abc123xyz12").groupdict(id)
    '123' #取id的值

    匹配模式
    re.I() 用点用 #忽略大小写
    re.search('[a-z]+',"abCD",flags=re.I)
    M() 用的少 #多行模式 改变 ^和$ 行为
    re.search('^a','bd ac') #不能匹配到a
    re.search('^a','bd ac',flags=re.M) #能匹配到a
    S() #点任意匹配模式
    re.search('^a','ab ac',flags=re.S) #多行匹配

    '''
  • 相关阅读:
    痞子衡嵌入式:浅谈i.MXRT1xxx系列MCU时钟相关功能引脚的作用
    痞子衡嵌入式:大话双核i.MXRT1170之在线联合调试双核工程的三种方法(IAR篇)
    220505 How cookie works
    [前端也需要学一点设计]_色彩篇_如何创建色盘
    怎么用 Solon 开发基于 undertow jsp tld 的项目?(新)
    Solon 1.7 重要发布,更现代感的应用开发框架
    Water 2.6.3 发布,一站式服务治理平台
    Solon 项目的单元测试插件
    Next.js 在 Serverless 中从踩坑到破茧重生
    CentOS 8迁移Rocky Linux 8手记
  • 原文地址:https://www.cnblogs.com/pojue/p/8034197.html
Copyright © 2020-2023  润新知