os模块,sys模块,json / pickle模块,logging模块

目录

  • OS模块
  • sys模块
  • json和pickle模块
    • 序列化和反序列化
    • json模块
    • pickle
    • logging模块

OS模块

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

# 创建文件夹
import os
os.mkdir(r'D:\py_case\test')

# 删除文件夹
os.rmdir(r'D:\py_case\test')

# # 列出指定目录下所有文件和子目录 (子目录文件不会列出来)
res = os.listdir(r'D:\pycharm_project\Test')
print(res)
# 打印结果:['.idea', 'ex16.py', 'test.json', 'test.pkl', 'test.py']

# 列出当前文件所在的文件夹
res = os.getcwd()
print(res)
# 打印结果: D:\pycharm_project\Test

# 列出当前文件所在的具体路径
# __file__ pycharm独有的
res = os.path.abspath(__file__)  # 根据不同的操作系统更换不同的/或print(res)   # D:\pycharm_project\Test\test.py

# 文件的文件夹
res = os.path.dirname(os.path.abspath(__file__))
print(res)   # D:\pycharm_project\Test
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_project\Test\img\test.jpg

# 判断路径是否存在(文件 / 文件夹都适用)
res = os.path.exists(r'D:\pycharm_project\Test\ex16.py')
print(res)   # True

# 判断是否为文件
res = os.path.isfile(r'D:\pycharm_project\Test\aaa')
print(res)  # False

# 删除文件
os.remove('test.txt')

# 重命名文件
os.rename('test.txt', 'test2.txt')

# 判断是否为文件夹
res = os.path.isdir(r'D:\pycharm_project\Test\aaa')
print(res)   #True

# 与终端交互,输入命令
res = os.system('dir')
print(res)

res = os.walk(r'D:\pycharm_project\Test\aaa')
print(res)   # <generator object walk at 0x0000027DB46916D8>

res = os.walk(r'D:\pycharm_project\Test')
# 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_project\Test\ex16.py
D:\pycharm_project\Test\test.py
D:\pycharm_project\Test\aaa\12.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下为"\t\n",Linux下为"\n"
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个')

原文地址:https://www.cnblogs.com/setcreed/p/11600885.html

时间: 2024-10-06 16:20:09

os模块,sys模块,json / pickle模块,logging模块的相关文章

python模块time&amp;datetime&amp;json &amp; picle&amp;14.logging等

本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个

Python全栈开发记录_第八篇(模块收尾工作 json &amp; pickle &amp; shelve &amp; xml)

由于上一篇篇幅较大,留下的这一点内容就想在这里说一下,顺便有个小练习给大家一起玩玩,首先来学习json 和 pickle. 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用了,所以eval的重点还是通常用来执行一个字符串表达式,并返回表达式的值. 什么是序列化? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pic

模块之json,pickle,os,sys,logging

json模块 序列化: 将python的数据类型存成 json串 反序列化: 将json串 读成python的数据类型 跨平台 dict/list dic = {'a':1} # 内存中转化 data = json.dumps(dic) data = json.loads(data) # 文件中转化 with open() as fw: json.dump(dic, fw) with open() as fr: data = json.load(fr) pickle模块 不能跨平台,但是支持py

常用模块---sys&amp;logging&amp;序列化模块(json&amp;pickle)

sys 模块 sys.argv 命令行参数List,第一个元素是程序本身路径,通常用来避免io 阻塞 print('欢迎进入') info=sys.argv if info[index('-u')+1] == 'mona' and info[index('-p')+1] == '123': print('login successful') sys.exit(n) 退出程序,正常退出时exit(0) count=1 while count<10: if count == 8: sys.exit(

Python3之logging模块浅析

目录 Python3之logging模块浅析 简单用法 日志与控制台同时输出 一个同时输出到屏幕.文件的完成例子 日志文件截取 日志重复打印问题解决 问题分析 解决方案 1.使用不同的日志对象 2.及时清理(logger.handlers.clear) 3.使用前先判断是否有相同的handler对象 总结: Python3之logging模块浅析 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志

函数知识点 1.包 2.hashlib模块 --- 摘要算法模块 3.logging模块 4.openpyxl模块 5.深浅拷贝 # 17

函数知识点1.包 1 # coding(编码系统):utf-8 2 """ 3 1.模块的三种来源: 4 1.内置 5 2.第三方 6 3.自定义 7 2.模块的四种表现形式: 8 1. .py文件 9 2.共享文件 10 3.包 11 4.内置 12 3.研究模块和包: 13 # 还可以站在另外两个角度分析: 14 1.模块的开发者 15 2.模块的使用者 16 4.导模块的那一瞬间发生了什么? 17 首先运行执行文件run.py,创建一个run.py的名称空间 18 1.

python3 logging模块

很多程序都有记录日志的需求,并且日志包含的信息有正常的程序访问日志还可能有错误,警告等信息输出,python的logging模块提供了标准的日志接口,可以通过它存储各种格式的日志,日志级别等级:critical > error > warning > info > debug 看下各个日志级别代表什么意思: 简单讲日志打印到屏幕: 1 >>> import logging 2 >>> logging.debug('test debug') 3 &

[Python 多线程] logging模块、Logger类 (八)

logging模块: 标准库里面的logging模块,在前面学习线程安全时曾用来解决print被打断的问题,这里会介绍logging模块的功能. logging模块是线程安全的,不需要客户做任何特殊的工作.它通过使用线程锁实现了这一点; 有一个锁来序列化访问模块的共享数据,每个处理程序还创建一个锁来序列化访问其底层 I/O. 日志记录级别: 级别 数值 CRITICAL 50 ERROR 40 WARNING 30,默认 INFO 20 DEBUG 10 NOTSET 0 定义的记录级别越低,信

python进阶二(模块)【2-1 python之导入模块】

python之导入模块 要使用一个模块,我们必须首先导入该模块.Python使用import语句导入一个模块.例如,导入系统自带的模块 math: 你可以认为math就是一个指向已导入模块的变量,通过该变量,我们可以访问math模块中所定义的所有公开的函数.变量和类: >>> math.pow(2, 0.5) # pow是函数 1.4142135623730951 >>> math.pi # pi是变量 3.141592653589793 如果我们只希望导入用到的mat

python 常用模块 time random os模块 sys模块 json &amp; pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess logging re正则 转自老男孩老师Yuan:http://www.cnblogs.com/yuanchenqi/articles/5732581.html 模块&包(* * * * *) 模块(modue)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,