• Python学习-day5 常用模块


    day5主要是各种常用模块的学习

    • time &datetime模块
    • random
    • os
    • sys
    • shutil
    • json & picle
    • shelve
    • xml处理
    • yaml处理
    • configparser
    • hashlib
    • subprocess
    • logging模块
    • re正则表达式

    time & datetime模块

    #Authon Ivor
    
    import time
    #打印时间戳
    print(time.time())
    #打印当前时间的时间对象格式
    print(time.localtime())
    
    #字符串转换时间对象
    print(time.strptime("2016-02-02 15:52:20","%Y-%m-%d %H:%M:%S"))
    #时间对象转换字符串
    print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
    
    #时间对象转换时间戳
    print(time.mktime(time.localtime()))
    #时间戳转换时间对象
    print(time.gmtime(time.time()))
    
    import datetime
    
    #打印当前日期时间
    print(datetime.datetime.now())
    #从时间戳转换成年月日格式
    print(datetime.date.fromtimestamp(time.time()))
    #从时间戳转换成年月日时间格式
    print(datetime.datetime.fromtimestamp(time.time()))
    #对当前时间进行加减运算
    print(datetime.datetime.now() + datetime.timedelta(days=3))
    print(datetime.datetime.now() + datetime.timedelta(hours=-3))
    #直接进行时间替换
    t = datetime.datetime.now()
    print(t.replace(year=2012,month=12,day=24,hour=0,minute=0,second=0))
    

    random模块

    #Authon Ivor
    
    import random
    for i in range(10):
        print(random.random())
        print(random.randint(1,5))
        print(random.randrange(1,5))
    

     shutil 模块

    #Authon Ivor
    
    import shutil
    #拷贝文件对象
    f1 = open("random mod.py")
    f2 = open("random_new.py","w")
    shutil.copyfileobj(f1,f2,length=1)
    
    #拷贝文件,文件和权限,包括copyfile和copymode
    shutil.copy("random mod.py","random_new.py")
    #拷贝文件和状态信息,包括copyfile和copystat
    shutil.copy2("random mod.py","random_new.py")
    
    #拷贝文件,不包括权限
    shutil.copyfile("random mod.py","random_new.py")
    #仅拷贝文件权限,仅拷贝权限。内容、组、用户均不变
    shutil.copymode("random mod.py","random_new.py")
    #拷贝状态的信息,包括:mode bits, atime, mtime, flags
    shutil.copystat("random mod.py","random_new.py")
    
    #拷贝文件目录,递归拷贝
    shutil.copytree()
    #递归删除
    shutil.rmtree()
    #移动文件
    shutil.move()
    
    shutil.make_archive()
    #base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
    # 如:www                        =>保存至当前路径
    # 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
    # •format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
    # •root_dir: 要压缩的文件夹路径(默认当前目录)
    # •owner: 用户,默认当前用户
    # •group: 组,默认当前组
    # •logger: 用于记录日志,通常是logging.Logger对象
    
    import zipfile
    
    # 压缩
    z = zipfile.ZipFile('laxi.zip', 'w')
    z.write('a.log')
    z.write('data.data')
    z.close()
    
    # 解压
    z = zipfile.ZipFile('laxi.zip', 'r')
    z.extractall()
    z.close()
    
    # zipfile 压缩解压
    
    import tarfile
    
    # 压缩
    tar = tarfile.open('your.tar','w')
    tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
    tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
    tar.close()
    
    # 解压
    tar = tarfile.open('your.tar','r')
    tar.extractall()  # 可设置解压地址
    tar.close()
    

    json & pickle 模块

    #Authon Ivor
    
    import json
    # info = {
    #     "name":"Ivor",
    #     "age":"27",
    #}
    
    info = ["a","b","c","f","f","g"]
    with open("jsondump.json","w") as f:
        f.write(json.dumps(info))
    
    with open("jsondump.json","w") as f:
        json.dump(info,f)
    
    
    #Authon Ivor
    
    import json
    info = {
        "name":"Ivor",
        "age":"27",
    }
    
    with open("jsondump.json","r") as f:
        a = json.loads(f.read())
    
    with open("jsondump.json","r") as f:
        b = json.load(f)
    
    print(a,b)
    
    #Authon Ivor
    import pickle
    
    def sayhi():
        print("Hello World!")
    
    info = {
        "name":"Ivor",
        "func":sayhi
    }
    
    with open("pickle.pickle","wb") as f:
        f.write(pickle.dumps(info))
    
    with open("pickle.pickle", "wb") as f:
        pickle.dump(info,f)
    
    
    
    #Authon Ivor
    
    import pickle
    
    def sayhi():
        print("Hello World!")
    
    with open("pickle.pickle","rb") as f:
        pickle.loads(f.read())
    
    with open("pickle.pickle","rb") as f:
        pickle.load(f)
    View Code

    shelve 模块

    #Authon Ivor
    import shelve
    
    d = shelve.open('shelve_test')  # 打开一个文件
    
    class Test(object):
        def __init__(self, n):
            self.n = n
    
    t1 = Test("123")
    t2 = Test("ivor")
    name = ["alex","ivor"]
    
    d["name"] = name
    d["t1"] = t1
    d["t2"] = t2
    
    d.close()
    View Code

    xml处理模块

    #Authon Ivor
    
    import xml.etree.ElementTree as et
    
    tree = et.parse("test.xml")
    root = tree.getroot()
    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)
    
    #修改
    for node in root.iter("year"):
        new_year = int(node.text) + 1
        node.text = str(new_year)
        node.set("updates","yes")
    
    tree.write("test2.xml")
    
    #删除
    for country in root.iter("country"):
        rank = int(country.find('rank').text)
        if rank > 50:
            root.remove(country)
    
    tree.write("test3.xml")
    
    创建xml
    
    tree = et.Element("Tree")
    stu = et.SubElement(tree,"Stu1")
    name = et.SubElement(stu,"name",attrib={"enrolled":"yes"})
    name.text = "ivor"
    age = et.SubElement(stu,"age",attrib={"checked":"no"})
    age.text = "22"
    stu2 = et.SubElement(tree,"Stu2")
    name = et.SubElement(stu2,"name",attrib={"enrolled":"yes"})
    name.text = "dark"
    age = et.SubElement(stu2,"age",attrib={"checked":"no"})
    age.text = "23"
    
    et = et.ElementTree(tree)
    et.write("test4.xml",encoding="utf-8",xml_declaration=True)
    View Code

    ConfigParser模块

    #Authon Ivor
    
    import configparser
    #新增
    config = configparser.ConfigParser()
    config["DEFAULT"] = {
        "port":5506,
        "enable":"YES"
    }
    config['bitbucket.org'] = {}
    config['bitbucket.org']['User'] = 'hg'
    config['topsecret.server.com'] = {}
    #修改
    config["DEFAULT"]["enable"] = "NO"
    a = config.sections()
    
    print(a)
    
    #写入
    with open("conf.ini","w") as f:
        config.write(f)
    
    #读取
    config.read("conf.ini")
    print(config.sections())
    print(config.items())
    print(config.keys())
    print(config.values())
    
    # ########## 读 ##########
    
    # secs = config.sections()
    
    # print secs
    
    # options = config.options('group2')
    
    # print options
    
    
    
    # item_list = config.items('group2')
    
    # print item_list
    
    
    
    # val = config.get('group1','key')
    
    # val = config.getint('group1','key')
    
    
    
    # ########## 改写 ##########
    
    # sec = config.remove_section('group1')
    
    # config.write(open('i.cfg', "w"))
    
    # sec = config.has_section('wupeiqi')
    
    # sec = config.add_section('wupeiqi')
    
    # config.write(open('i.cfg', "w"))
    
    # config.set('group2','k1',11111)
    
    # config.write(open('i.cfg', "w"))
    
    # config.remove_option('group2','age')
    
    # config.write(open('i.cfg', "w"))
    View Code

    hashlib模块

    #Authon Ivor
    import hashlib
    
    m = hashlib.md5()
    m.update(b"Hello")
    m.update(b"It's me")
    print(m.digest())
    m.update(b"It's been a long time since last time we ...")
    print(m.digest())  # 2进制格式hash
    print(len(m.hexdigest()))  # 16进制格式hash
    '''
    def digest(self, *args, **kwargs): # real signature unknown
    
        """ Return the digest value as a string of binary data. """
    
        pass
    def hexdigest(self, *args, **kwargs): # real signature unknown
    
        """ Return the digest value as a string of hexadecimal digits. """
    
        pass
    '''
    import hashlib
    # ######## md5 ########
    hash = hashlib.md5()
    hash.update('admin')
    print(hash.hexdigest())
    # ######## sha1 ########
    hash = hashlib.sha1()
    hash.update('admin')
    print(hash.hexdigest())
    # ######## sha256 ########
    hash = hashlib.sha256()
    hash.update('admin')
    print(hash.hexdigest())
    # ######## sha384 ########
    hash = hashlib.sha384()
    hash.update('admin')
    print(hash.hexdigest())
    # ######## sha512 ########
    hash = hashlib.sha512()
    hash.update('admin')
    print(hash.hexdigest())
    View Code

    Subprocess模块

    #Authon Ivor
    
    import subprocess
    
    #执行命令,返回命令执行状态 , 0 or 非0
    retcode = subprocess.call(["ls", "-l"])
    
    #执行命令,如果命令结果为0,就正常返回,否则抛异常
    subprocess.check_call(["ls", "-l"])
    
    #接收字符串格式命令,返回元组形式,第1个元素是执行状态,第2个是命令结果
    subprocess.getstatusoutput('ls /bin/ls')
    (0, '/bin/ls')
    
    #接收字符串格式命令,并返回结果
    subprocess.getoutput('ls /bin/ls')
    '/bin/ls'
    
    #执行命令,并返回结果,注意是返回结果,不是打印,下例结果返回给res
    res=subprocess.check_output(['ls','-l'])
    res
    b'total 0
    drwxr-xr-x 12 alex staff 408 Nov 2 11:05 OldBoyCRM
    '
    
    #上面那些方法,底层都是封装的subprocess.Popen
    p = subprocess.Popen("df -h|grep disk",stdin=subprocess.PIPE,stdout=subprocess.PIPE,shell=True)
    p.stdout.read()
    
    # 可用参数:
    # •args:shell命令,可以是字符串或者序列类型(如:list,元组)
    # •bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
    # •stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
    # •preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
    # •close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
    # 所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
    # •shell:同上
    # •cwd:用于设置子进程的当前目录
    # •env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
    # •universal_newlines:不同系统的换行符不同,True -> 同意使用 
    
    # •startupinfo与createionflags只在windows下有效
    # 将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等
    View Code

    logging模块

    #Authon Ivor
    import logging
    
    logging.basicConfig(filename="access.log",level=logging.INFO,format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
    
    # 日志格式
    #
    # %(name)s
    # Logger的名字
    #
    # %(levelno)s
    # 数字形式的日志级别
    #
    # %(levelname)s
    # 文本形式的日志级别
    #
    # %(pathname)s
    # 调用日志输出函数的模块的完整路径名,可能没有
    #
    # %(filename)s
    # 调用日志输出函数的模块的文件名
    #
    # %(module)s
    # 调用日志输出函数的模块名
    #
    # %(funcName)s
    # 调用日志输出函数的函数名
    #
    # %(lineno)d
    # 调用日志输出函数的语句所在的代码行
    #
    # %(created)f
    # 当前时间,用UNIX标准的表示时间的浮点数表示
    #
    # %(relativeCreated)d
    # 输出日志信息时的,自Logger创建以来的毫秒数
    #
    # %(asctime)s
    # 字符串形式的当前时间。默认格式是 “2003 - 07 - 08 16: 49:45, 896”。逗号后面的是毫秒
    #
    # %(thread)d
    # 线程ID。可能没有
    #
    # %(threadName)s
    # 线程名。可能没有
    #
    # %(process)d
    # 进程ID。可能没有
    #
    # %(message)s
    # 用户输出的消息
    View Code

    re模块 

    #Authon Ivor
    def addition(a):
        return str(round(float(a[0].strip())+float(a[1].strip()),5))
    def subtraction(a):
        return str(round(float(a[0].strip())-float(a[1].strip()),5))
    def multiplication(a):
        return str(round(float(a[0].strip())*float(a[1].strip()),5))
    def division(a):
        return str(round(float(a[0].strip())/float(a[1].strip()),5))
    
    import re
    
    num = '''
    请输入运算式:
    1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )
    >>>
    '''
    a = input(num)
    a = a.replace(" ","")
    while True:
        b = re.search(r'([^()]+)',a)
        if b:
            c = re.search('d+.?d*/(+|-)?d+.?d*',b.group())
            if c:
                d = division(c.group().split("/"))
                a = a.replace(c.group(),d)
                continue
            c = re.search('d+.?d**(+|-)?d+.?d*',b.group())
            if c:
                d = multiplication(c.group().split("*"))
                a = a.replace(c.group(),d)
                continue
            c = re.search('d+.?d*-d+.?d*',b.group())
            if c:
                d = subtraction(c.group().split("-"))
                a = a.replace(c.group(),d)
                continue
            c = re.search('d+.?d*+d+.?d*',b.group())
            if c:
                d = addition(c.group().split("+"))
                a = a.replace(c.group(),d)
                continue
            c = re.search('d+.?d*(+|-){2}d+.?d*',b.group())
            if c:
                if "+-" in c.group():
                    a = a.replace(c.group(),c.group().replace("+-","-"))
                if "--" in c.group():
                    a = a.replace(c.group(),c.group().replace("--","+"))
                if "-+" in c.group():
                    a = a.replace(c.group(),c.group().replace("-+","-"))
                if "++" in c.group():
                    a = a.replace(c.group(),c.group().replace("++","+"))
                continue
            if b and not c:
                a = a.replace(b.group(),b.group().strip("()"))
                continue
        else:
            if "+-" in a:
                a = a.replace("+-","-")
            if "--" in a:
                a = a.replace("--","+")
            if "-+" in a:
                a = a.replace("-+","-")
            if "++" in a:
                a = a.replace("++","+")
            b = re.search('d+.?d*/(+|-)?d+.?d*', a)
            if b:
                c = division(b.group().split("/"))
                a = a.replace(b.group(),c)
                continue
            b = re.search('d+.?d**(+|-)?d+.?d*',a)
            if b:
                c = multiplication(b.group().split("*"))
                a = a.replace(b.group(),c)
                continue
            b = re.search('d+.?d*-d+.?d*', a)
            if b:
                c = subtraction(b.group().split("-"))
                a = a.replace(b.group(),c)
                continue
            b = re.search('d+.?d*+d+.?d*', a)
            if b:
                c = addition(b.group().split("+"))
                a = a.replace(b.group(),c)
                continue
            print(a)
            exit()
    View Code
  • 相关阅读:
    将后台返回的 xml replace
    程序员数学的重要性
    .net里生成的 checkboxlist 至少要选择一个
    关于如何坚持目标,网上偶然看到的,转载一下
    犹豫不决(收集)
    CSS中Padding参数说明及使用指南
    IE地址栏小图标问题
    常用sql语句集锦
    ie9怎么开兼容模式
    一台MySql服务器不同数据库之间数据同步_解决方案(Java)
  • 原文地址:https://www.cnblogs.com/Darksugar/p/6546693.html
Copyright © 2020-2023  润新知