• os模块,sys模块,json和pickle模块,logging模块


    OS模块

    能与操作系统交互,控制文件 / 文件夹

    # 创建文件夹
    import os
    os.mkdir(r'D:py_case	est')
    
    # 删除文件夹
    os.rmdir(r'D:py_case	est')
    
    # # 列出指定目录下所有文件和子目录 (子目录文件不会列出来)
    res = os.listdir(r'D:pycharm_projectTest')
    print(res)
    # 打印结果:['.idea', 'ex16.py', 'test.json', 'test.pkl', 'test.py']
    
    # 列出当前文件所在的文件夹
    res = os.getcwd()
    print(res)
    # 打印结果: D:pycharm_projectTest
    
    # 列出当前文件所在的具体路径
    # __file__ pycharm独有的
    res = os.path.abspath(__file__)  # 根据不同的操作系统更换不同的/或
    print(res)   # D:pycharm_projectTest	est.py
    
    # 文件的文件夹
    res = os.path.dirname(os.path.abspath(__file__))
    print(res)   # D:pycharm_projectTest
    res = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    print(res)    # D:pycharm_project
    
    
    # 拼接文件路径
    res = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'img', 'test.jpg')
    print(res)   # D:pycharm_projectTestimg	est.jpg
    
    
    # 判断路径是否存在(文件 / 文件夹都适用)
    res = os.path.exists(r'D:pycharm_projectTestex16.py')
    print(res)   # True
    
    
    # 判断是否为文件
    res = os.path.isfile(r'D:pycharm_projectTestaaa')
    print(res)  # False
    
    
    # 删除文件
    os.remove('test.txt')
    
    # 重命名文件
    os.rename('test.txt', 'test2.txt')
    
    # 判断是否为文件夹
    res = os.path.isdir(r'D:pycharm_projectTestaaa')
    print(res)   #True
    
    
    # 与终端交互,输入命令
    res = os.system('dir')
    print(res)
    
    
    
    res = os.walk(r'D:pycharm_projectTestaaa')
    print(res)   # <generator object walk at 0x0000027DB46916D8>
    
    
    res = os.walk(r'D:pycharm_projectTest')
    # print(res)
    for dir, _, files in res:
        # print(i) # 所有文件夹名
        # print(l)  # 某个文件下对应的所有文件名
        for file in files:
            file_path = os.path.join(dir,file)  # 拼接成所有文件名
            if file_path.endswith('py'):   # 拿到py文件
                print(file_path)
                
                
    # 打印结果:
    '''
    D:pycharm_projectTestex16.py
    D:pycharm_projectTest	est.py
    D:pycharm_projectTestaaa12.py
    '''
    
    
    方法 详解
    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.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的大小

    sys模块

    与python解释器交互

    import sys
    
    ## 最常用,当使用命令行式运行文件,接收多余的参数
    res = sys.argv
    print(res)
    

    方法 详解
    sys.argv 命令行参数List,第一个元素是程序本身路径
    sys.modules.keys() 返回所有已经导入的模块列表
    sys.exc_info() 获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息
    sys.exit(n) 退出程序,正常退出时exit(0)
    sys.hexversion 获取Python解释程序的版本值,16进制格式如:0x020403F0
    sys.version 获取Python解释程序的版本信息
    sys.maxint 最大的Int值
    sys.maxunicode 最大的Unicode值
    sys.modules 返回系统导入的模块字段,key是模块名,value是模块
    sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    sys.platform 返回操作系统平台名称
    sys.stdout 标准输出
    sys.stdin 标准输入
    sys.stderr 错误输出
    sys.exc_clear() 用来清除当前线程所出现的当前的或最近的错误信息
    sys.exec_prefix 返回平台独立的python文件安装的位置
    sys.byteorder 本地字节规则的指示器,big-endian平台的值是'big',little-endian平台的值是'little'
    sys.copyright 记录python版权相关的东西
    sys.api_version 解释器的C的API版本

    json和pickle模块

    序列化和反序列化

    • 序列化:按照特定的规则排列,把python数据类型转化为json串,便于跨平台传输
    • 反序列化:把json串转化为python / java / c / php 需要的语言

    Json序列化并不是python独有的,json序列化在java等语言中也会涉及到,因此使用json序列化能够达到跨平台传输数据的目的。

    json数据类型和python数据类型对应关系表

    Json类型 Python类型
    {} dict
    [] list
    "string" str
    520.13 int或float
    true/false True/False
    null None

    json模块

    dic = {'a': 1, 'b': 2, 'c': None}
    
    data = json.dumps(dic)   # json串中没有单引号
    print(type(data), data)
    data = json.loads(data)
    print(type(data), data)
    
    # 打印结果:
    '''
    <class 'str'> {"a": 1, "b": 2, "c": null}
    <class 'dict'> {'a': 1, 'b': 2, 'c': None}
    '''
    
    dic = {'a': 1, 'b': 2, 'c': None}
    
    # 序列化字典为json串,并保存文件
    with open('test.json', 'w', encoding='utf-8') as fw:
        json.dump(dic, fw)
        
    # 反序列化
    with open(f'{"test"}.json', 'r', encoding='utf-8') as fr:
        data = json.load(fr)
        print(type(data), data)  # <class 'dict'> {'a': 1, 'b': 2, 'c': None}
    

    pickle

    Pickle序列化和所有其他编程语言特有的序列化问题一样,它只能用于Python。但是pickle的好处是可以存储Python中的所有的数据类型,包括对象,而json不可以。

    import pickle
    
    se = {1, 3, 4, 5, 6}
    with open('test.pkl', 'wb') as fw:
        pickle.dump(se, fw)
    
    se = {1, 3, 4, 5, 6}
    
    def func():
        x = 3
        def wrapper():
            print(x)
        return wrapper
    
    with open('test.pkl', 'wb') as fw:
        pickle.dump(func, fw)
    
    with open('test.pkl', 'rb') as fr:
        data = pickle.load(fr)
        # print(data)
        res = data()
        res()
    

    logging模块

    v1:

    import logging
    
    # 日志级别(如果不设置,默认显示30以上)
    logging.info('info')   # 10
    logging.debug('debug')     # 20
    logging.warning('warning')   # 30
    logging.error('error')     # 40
    logging.critical('critical')  # 50
    
    # 打印结果:
    '''
    WARNING:root:warning
    ERROR:root:error
    CRITICAL:root:critical
    '''
    

    v2:

    import logging
    
    # 日志的基本配置
    
    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)  # level是等级,10以上的都记录日志
    
    logging.info('正常信息')  # 10
    logging.debug('调试信息')  # 20
    logging.warning('警告信息')  # 30
    logging.error('报错信息')  # 40
    logging.critical('严重错误信息')  # 50
    
    
    # 会创建一个access.log日志:
    '''
    2019-09-27 21:57:45 PM - root - DEBUG -test: 调试信息
    2019-09-27 21:57:45 PM - root - INFO -test: 正常信息
    2019-09-27 21:57:45 PM - root - WARNING -test: 警告信息
    2019-09-27 21:57:45 PM - root - ERROR -test: 报错信息
    2019-09-27 21:57:45 PM - root - CRITICAL -test: 严重错误信息
    
    '''
    

    v3: 自定义配置

    import logging
    
    # 1. 配置logger对象
    cwz_logger = logging.Logger('cwz')
    neo_logger = logging.Logger('neo')
    
    # 2. 配置格式
    formmater1 = logging.Formatter('%(asctime)s - %(name)s -%(thread)d - %(levelname)s -%(module)s:  %(message)s',
                                   datefmt='%Y-%m-%d %H:%M:%S %p ', )
    
    formmater2 = logging.Formatter('%(asctime)s :  %(message)s',
                                   datefmt='%Y-%m-%d %H:%M:%S %p', )
    
    formmater3 = logging.Formatter('%(name)s %(message)s', )
    
    # 3. 配置handler --> 往文件打印or往终端打印
    h1 = logging.FileHandler('cwz.log')
    h2 = logging.FileHandler('neo.log')
    sm = logging.StreamHandler()
    
    # 4. 给handler配置格式
    h1.setFormatter(formmater1)
    h2.setFormatter(formmater2)
    sm.setFormatter(formmater3)
    
    # 5. 把handler绑定给logger对象
    cwz_logger.addHandler(h1)
    cwz_logger.addHandler(sm)
    neo_logger.addHandler(h2)
    
    # 6. 直接使用
    cwz_logger.info(f'cwz 购买 变形金刚 8个')
    
  • 相关阅读:
    水晶报表开发
    ASP.NET页面刷新方法总结
    DataList获取当前ID
    flexviewer让指定slid值对于的图层可见
    WKT
    消息的分类
    MFC画图
    MFC画文字DrawText,GetTextExtent,GetTextMetrics
    djvu是什么
    代码提示插件 Visual Assistxv
  • 原文地址:https://www.cnblogs.com/setcreed/p/11605009.html
Copyright © 2020-2023  润新知