• Python第五天-模块


    模块的介绍

    python中的一个.py文件就是一个模块,一个package也是一个模块,模块有内置模块,第三方模块,自定义模块3种。

    def my_sum(*args):
        return sum(args)
    

    定义一个util.py模块

    import util
    
    print(util.my_sum(45, 63))
    
    from util import my_sum
    
    print(my_sum(3, 5))
    

    另一个模块导入这个模块。

    import sys
    
    for val in sys.path:
        print(val)
    
    D:pythonprojectspython_firstfirstday5
    C:UsersxxxAppDataLocalProgramsPythonPython38python38.zip
    C:UsersxxxAppDataLocalProgramsPythonPython38DLLs
    C:UsersxxxAppDataLocalProgramsPythonPython38lib
    C:UsersxxxAppDataLocalProgramsPythonPython38
    C:UsersxxxAppDataLocalProgramsPythonPython38libsite-packages
    

    python的import会从sys模块的path所包含的所有路径中查询模块

    def my_sum(*args):
        return sum(args)
    
    if __name__ == "__main__":
        print(__name__)
    

    name__在当前文件执行时为__main,被其他模块导入时为模块名,加上这个判断表示只有在当前文件中执行才执行print函数。

    内置模块

    time

    import time
    
    print(time.time())  # 时间戳,获取从1970年开始的当前秒值
    print(time.localtime())  # 结构化时间,当前时间的年月日,时分秒 时区为当前所在时区 将时间戳转换成结构化时间,默认为当前时间
    print(time.localtime().tm_year)
    print(time.gmtime())  # 结构化时间,当前时间的年月日,时分秒 格林威治时间
    print(time.mktime(time.localtime()))  # 将结构化时间转换成时间戳
    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))  # 结构化时间格式化为字符串
    print(time.strptime("2019-02-05 13:51:25", "%Y-%m-%d %H:%M:%S"))  # 字符串解析为结构化时间
    print(time.asctime(time.localtime()))  # 结构化时间格式化为字符串 固定的格式
    print(time.ctime(time.time()))  # 时间戳格式化为字符串 固定的格式
    time.sleep(0.2)  # 线程延迟执行时间
    

    time模块提供时间的一些基本操作。

    datetime

    import datetime
    
    current = datetime.datetime.now()  # 获取当前时间
    print(current.strftime("%Y-%m-%d %H:%M:%S"))  # 时间格式化
    print(current - datetime.timedelta(hours=5))  # 获取当前时间之前5个小时的时间
    

    datetime模块提供更多的对时间日期操作的功能,如时间日期的加减。

    random

    import random
    
    print(random.random())  # [0,1)之间的随机小数值
    print(random.randint(1, 5))  # [1,5]之间的随机整数值 等于randrange(1,5+1)
    print(random.randrange(1, 5))  # [1,5)之间的随机整数值
    print(random.choice([1, 2, 3]))  # 获取序列中的随机值 先获取随机索引,再通过索引取值
    print(random.sample({1, 2, 3, 4, 5}, 3))  # 序列或集合中随机去K个值
    print(random.uniform(1, 3))  # [1,3)之间的随机小数值
    nums = [1, 2, 3, 4, 5]
    random.shuffle(nums)  # 对列表随机洗牌
    print(nums)
    

    random提供了获取随机值的功能。

    os

    
    import 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  获取系统环境变量
    
    print(os.path.abspath(__file__))  # 返回path规范化的绝对路径
    print(os.path.split(__file__))  # 将path分割成目录和文件名二元组返回
    print(os.path.dirname(__file__))  # 返回path的目录。其实就是os.path.split(path)的第一个元素
    print(os.path.basename(__file__))  # #      返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素
    print(os.path.exists(__file__))  # 如果path存在,返回True;如果path不存在,返回False
    print(os.path.isabs(__file__))  # 如果path是绝对路径,返回True
    print(os.path.isfile(__file__))  # 如果path是一个存在的文件,返回True。否则返回False
    print(os.path.isdir(__file__))  # 如果path是一个存在的目录,则返回True。否则返回False
    print(os.path.join(__file__))  # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    print(os.path.getatime(__file__))  # 返回path所指向的文件或者目录的最后存取时间
    print(os.path.getmtime(__file__))  # 返回path所指向的文件或者目录的最后修改时间
    

    os模块可以调用操作系统的一些功能

    sys

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

    sys模块表示python解释器的一些功能。

    json

    import json
    
    person_dict = {
        "name": "lisi",
        "age": 23,
        "address": {
            "province": "beijing",
            "city": "beijing"
        }
    }
    person_str = json.dumps(person_dict)  # 将对象转成json字符串
    json.dump(person_dict, open("person_dict.json", "w"))  # 将对象转成字符串并写入文件中
    print(person_str)
    person = json.loads(person_str)  # 将字符串转成对象
    print(person, type(person))
    print(json.load(open("person_dict.json", "r")))  # 从文件中读出字符串并转成对象
    

    json模块提供了格式化json和解析json的功能。

    pickle

    import pickle
    
    person_dict = {
        "name": "lisi",
        "age": 23,
        "address": {
            "province": "beijing",
            "city": "beijing"
        }
    }
    person_bytes = pickle.dumps(person_dict)  # 将对象转成字节数组
    print(person_bytes, type(person_bytes))
    person = pickle.loads(person_bytes)  # 将字节数组转成对象
    print(person)
    

    pickle模块提供了序列化和反序列化的功能。

    shelve

    import shelve
    
    person_dict = {
        "name": "lisi",
        "age": 23,
        "address": {
            "province": "beijing",
            "city": "beijing"
        }
    }
    f = shelve.open("shelve")
    print(f, type(f))
    f["person"] = person_dict  # 将对象序列化并保持到文件中
    person = f.get("person")  # 读取文件并反序列化成对象
    print(person)
    

    shelve模块封装了pickle模块,提供了操作字典类似的功能,将对象反序列化后保存到文件中,读取字典就是读取文件。

    xml

    import xml.etree.ElementTree as ET
    
    # 读取和修改xml文件
    person_doc = ET.parse("person.xml")  # 解析xml文件
    person_tag = person_doc.getroot()  # 获取xml的根元素
    print(person_tag.tag)  # 获取元素标签名
    print(person_tag.get("id"))  # 获取元素属性
    print(person_tag.set("id", "p2"))  # 修改元素属性
    person_children = list(person_tag)  # 获取元素子元素列表
    print(person_children[0].text)  # 获取元素文本内容
    print(person_children[1].text)
    address_children = list(person_children[2])
    print(address_children[0].text)
    print(address_children[1].text)
    address_children[0].text = "shanghai"  # 修改元素内容
    person_tag.remove(person_children[1])  # 删除子元素
    
    person_doc.write("persn_new.xml")  # 将新的xml文档写入文件
    
    # 创建xml文件
    user_tag = ET.Element("user")  # 创建一个新元素
    user_tag.set("id", "u1")  # 设置属性
    name_tag = ET.SubElement(user_tag, "name")  # 创建子元素
    name_tag.text = "lisi"  # 设置内容
    
    user_doc = ET.ElementTree(user_tag)  # 创建文档
    user_doc.write("user.xml")  # 文件写入
    

    ElementTree模块提供了解析及操作xml文件的功能。

    re

    import re
    
    mobile_re_str = r"^1[3578|]d{9}$"  # r表示去除转义
    mobile_re = re.compile(mobile_re_str)  # 创建一个正则表达式对象 手机号
    print(mobile_re, type(mobile_re))
    print(mobile_re.match("18925517692"))  # 如果匹配返回匹配对象,不匹配返回None
    print(re.match(mobile_re_str, "3mmsmevm"))  # 等于先compile再match
    
    print(re.findall("d{4}", "asdf236bsndm3335nsndns4444"))  # 获取所有匹配结果
    for m in re.finditer("d{4}", "asdf236bsndm3335nsndns4444"):  # 获取所有匹配对象
        print(m.group())  # 获取匹配值
    
    print(re.search("d{4}", "asdf236bsndm3335nsndns4444").group())  # 获取第一个匹配结果
    
    print(re.split("s+", "abc d  
     dd 	 s"))  # 字符串分割
    
    

    re模块提供了操作正则表达式的功能。

    logging

    import logging
    
    # 日志配置 文件和控制台输出只能有一个
    logging.basicConfig(
        level=logging.DEBUG,
        filename="logging.log",
        filemode="w",
        format="%(asctime)s [%(lineno)s] %(message)s"
    )
    
    logging.debug("this is debug msg")
    logging.info("this is debug msg")
    logging.error("this is debug msg")
    logging.warning("this is debug msg")
    logging.critical("this is debug msg")
    

    使用这种方式,文件和控制台只能输出一种。

    import logging
    
    
    def getLogger():
        logger = logging.getLogger()
        fh = logging.FileHandler("logging2.log", mode="w")
        sh = logging.StreamHandler()
        fm = logging.Formatter("[%(asctime)s] %(message)s")
        fh.setFormatter(fm)
        sh.setFormatter(fm)
        logger.addHandler(fh)
        logger.addHandler(sh)
        logger.setLevel(logging.DEBUG)
        return logger
    
    
    logger = getLogger()
    logging.debug("this is debug msg")
    logging.info("this is debug msg")
    logging.error("this is debug msg")
    logging.warning("this is debug msg")
    logging.critical("this is debug msg")
    

    文件和控制台都可以输出,更加的灵活。

    configparser

    import configparser
    
    # 创建一个配置文件
    parser = configparser.ConfigParser()
    parser["DEFAULT"] = {
        "username": "lisi",
        "pwd": "123456"
    }
    parser["JDBC"] = {
        "version": "8.0"
    }
    with open("mysql.ini", "w") as f:
        parser.write(f)
    
    # 读取配置文件及修改配置文件
    parser = configparser.ConfigParser()
    
    parser.read("mysql.ini", "utf-8")
    print(parser.sections())
    print(parser.defaults())
    
    parser["ODBC"] = {
        "version": "5.7"
    }
    parser.remove_section("JDBC")
    
    with open("mysql.ini", "w") as f:
        parser.write(f)
    

    configparser模块提供了一种操作字典的方式来操作配置文件。

    hashlib

    import hashlib
    
    # md5加密
    print(hashlib.algorithms_available)
    algorithm_md5 = hashlib.md5()
    algorithm_md5.update("hello".encode("utf-8"))
    print(algorithm_md5.hexdigest())
    # sha256加密
    algorithm_sha256 = hashlib.sha3_256()
    algorithm_sha256.update("hello".encode("utf-8"))
    print(algorithm_sha256.hexdigest())
    

    hashlib模块提供了多种加密方法,如md5,sha256等。

  • 相关阅读:
    RefineDet by hs
    RFCN by hs
    经典排序算法总结(二)by Rose
    Libra R-CNN——“平衡学习” by Rose
    经典排序算法总结(一)by Rose
    注意力机制在MDNet跟踪算法中的应用 by leona
    Deep Sort 多目标跟踪算法总结-by Wilson
    tf.truncated_normal_initializer
    tf.add_to_collection方法
    tf.trainable_variables方法
  • 原文地址:https://www.cnblogs.com/strongmore/p/13593603.html
Copyright © 2020-2023  润新知