模块

1. os模块

  • os模块有什么用

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

  • # 对文件操作
    import os
    ## 判断是否为文件
    res = os.path.isfile(r'D:\上海python12期视频\python12期视频\day 16\00 上节课回顾.md')
    print(res) ## 删除文件
    # os.remove(r'') ## 重名名文件
    # os.rename(r'', r'') # 对文件夹操作 ## 判断是否为文件夹
    # os.path.isdir() ## 创建文件夹
    if not os.path.exists(r'D:\上海python12期视频\python12期视频\test'):
    os.mkdir(r'D:\上海python12期视频\python12期视频\test') ## 删除文件夹
    os.rmdir(r'D:\上海python12期视频\python12期视频\test') ## 列出文件夹内所有的文件(*****)
    res = os.listdir(r'D:\上海python12期视频\python12期视频\day 16')
    print(res) # 辅助性的 ## 当前文件的所在文件夹
    res = os.getcwd()
    print(res) ## 当前文件所在的具体路径
    ## __file__ pycharm独有
    print('__file__:', __file__)
    res = os.path.abspath(__file__) # 根据不同的操作系统,更换不同的\或/
    print(res) ## 文件的文件夹 res = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    print(res) ## 拼接文件路径
    res = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'img', 'test.jpg')
    print(res) ## 判断路径是否存在(文件or文件夹都适用)
    res = os.path.exists(r'D:\上海python12期视频\python12期视频\day 16\01 os模块.py')
    print(res) # 尽量不要写路径 ## 代码统计(只是想告诉你os模块的应用场景)
    def count_code(file_path):
    """通过文件路径计算文件代码量"""
    count = 0
    # tag = False
    # tag2 = False
    with open(file_path, 'r', encoding='utf8') as fr:
    for i in fr:
    if i.startswith('#'):
    continue
    if i.startswith('\n'):
    count += 1
    # 计算代码量
    return count def count_all_file_code(top):
    if os.path.isfile(top):
    count = count_code(top)
    return count # 针对文件夹做处理
    res = os.walk(top) # 只针对文件夹
    count_sum = 0
    for dir, _, files in res:
    # print(i) # 所有文件夹名
    # print(l) # i文件夹下对应的所有文件名
    for file in files:
    file_path = os.path.join(dir, file)
    if file_path.endswith('py'): # 判断是否为py文件
    count = count_code(file_path)
    count_sum += count
    return count_sum top = r'D:\上海python12期视频\python12期视频\项目-atm'
    count_sum = count_all_file_code(top)
    print(f' {top} 代码量统计: {count_sum}')

2. sys模块

  • sys模块的作用

    与python解释器交互

import sys

## 最常用,当使用命令行式运行文件,接收多余的参数
res = sys.argv
print(res)
# print(1)
# print(res[1]) #
import requests # 拿到当前导入的模块
print(sys.modules.keys()) # requests = __import__('requests') # 了解
print(sys.api_version) print(sys.copyright) print(sys.version) print(sys.hexversion)

3. json和pickle模块

  • json的作用

    跨平台数据交互,json串,但python中的集合在json中没有对应的转化

  • pickle模块

    不跨平台,针对python所有数据类型(如集合)使用

序列化: 按照特定的规则排列(json串-->跨平台交互,传输数据)
反序列化: 按照特定的规则把json串转换成python/java/c/php需要的数据类型
# json 实例
import json dic = [1, (1, 2)] res = json.dumps(dic) # json串中没有单引号,
print(type(res), res) # 跨平台数据交互 res = json.loads(res)
print(type(res), res) # (********)
# dic = {'a': True, 'b': None} # # # 序列化字典为json串,并保存文件
# import json
# def dic():
# print('func')
# with open('test.json', 'w', encoding='utf8') as fw:
# json.dump(dic, fw)
#
# # 反序列化
# with open('test.json', 'r', encoding='utf8') as fr:
# data = json.load(fr)
# print(type(data), data) # goods = {
# 1: 'wawa',
# }
#
# with open('nick.json', 'r', encoding='utf8') as fr:
# data = json.load(fr)
# data['wawa'] = 1
# data['extra'] -= 10
# data['locked'] = 1
# with open('nick.json', 'w', encoding='utf8') as fw:
# json.dump(data, fw)
# pickle 实例
import pickle # -->未来存对象(存对象名,) # def func(): # 针对地址而言,只存了一个函数名
# print('func') # with open('test.pkl','wb') as fw:
# pickle.dump(func,fw) def func():
print('lksjdfkljskldfjlksjdlk') with open('test.pkl', 'rb') as fr:
data = pickle.load(fr)
print(type(data), data)
data() # func()

4. logging模块

  • logging 模块的作用

    就是记录日志

(1)日志配置

import logging

# 日志级别(如果不设置,默认显示30以上)
# v1
# logging.info('info') # 10
# logging.debug('debug') # 20
# logging.warning('wraning') # 30
# logging.error('error') # 40
# logging.critical('critical') # 50 # v2 --> 添加设置 # logging.basicConfig(filename='20190927.log',
# format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
# datefmt='%Y-%m-%d %H:%M:%S %p',
# level=10)
#
# username = 'nick'
# goods = 'bianxingjingang'
# logging.info(f'{username}购物{goods}成功') # 10 # v3: 自定义配置 # 1. 配置logger对象
nick_logger = logging.Logger('nick')
json_logger = logging.Logger('jason') # 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('nick.log')
h2 = logging.FileHandler('json.log')
sm = logging.StreamHandler() # 4. 给handler配置格式
h1.setFormatter(formmater1)
h2.setFormatter(formmater2)
sm.setFormatter(formmater3) # 5. 把handler绑定给logger对象
nick_logger.addHandler(h1)
nick_logger.addHandler(sm)
json_logger.addHandler(h2) # 6. 直接使用
nick_logger.info(f'nick 购买 变形金刚 4个')
# json_logger.info(f'json 购买 变形金刚 10个')

(2)实际开发中日志的使用



# 记住以上可以全部忘记,在实际开发中只要会下面的cv大法,只需要根据注释内容,按自己的需求自定义日志保存路径等内容即可

# settings文件中复制粘贴下面的内容:
*******************************************************************
# 定义三种日志输出格式 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' # 其中name为getLogger()指定的名字;lineno为调用日志输出函数的语句所在的代码行
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
# 定义日志输出格式 结束 logfile_dir = base_path # log文件的目录,需要自定义文件路径 # atm
logfile_dir = os.path.join(logfile_dir, 'log') # C:\Users\oldboy\Desktop\atm\log logfile_name = 'atmlog.log' # log文件名,需要自定义路径名 # 如果不存在定义的日志目录就创建一个
if not os.path.isdir(logfile_dir): # C:\Users\oldboy\Desktop\atm\log
os.mkdir(logfile_dir) # log文件的全路径
logfile_path = os.path.join(logfile_dir, logfile_name) # C:\Users\oldboy\Desktop\atm\log\log.log
# 定义日志路径 结束 # log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {}, # filter可以不定义
'handlers': {
# 打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
# 打印到文件的日志,收集info及以上的日志
'default': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件
'maxBytes': 1024 * 1024 * 5, # 日志大小 5M (*****)
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
# logging.getLogger(__name__)拿到的logger配置。如果''设置为固定值logger1,则下次导入必须设置成logging.getLogger('logger1')
'': {
# 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'handlers': ['default', 'console'],
'level': 'DEBUG',
'propagate': False, # 向上(更高level的logger)传递
},
},
}
************************************************************
# 在后端的公用方法中书写下面的内容即可。
import logging.config
def get_log(name):
logging.config.dictConfig(setting.LOGGING_DIC)
logger = logging.getLogger(name)
return logger # 在程序需要记录日志等的地方使用即可 logger = common.get_log('要记录内容')

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

  1. Python(正则 Time datatime os sys random json pickle模块)

    正则表达式: import re #导入模块名 p = re.compile(-]代表匹配0至9的任意一个数字, 所以这里的意思是对传进来的字符串进行匹配,如果这个字符串的开头第一个字符是数字,就代表 ...

  2. 023--python os、sys、json、pickle、xml模块

    一.os模块 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 >>> os.getcwd() 'C:\\Python36' os.chdir(&quo ...

  3. python基础--常用的模块(collections、time、datetime、random、os、sys、json、pickle)

    collection模块: namedtuple:它是一个函数,是用来创建一个自定义的tuple对象的,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素.所以我们就可以 ...

  4. python模块概况,json/pickle,time/datetime,logging

    参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html http://www.cnblogs.com/alex3714/articles/51 ...

  5. python之模块(os、sys、json、subprocess)

    目录 os模块 sys模块 json模块 subprocess模块 os模块 os模块主要是与操作系统打交道. 导入os模块 import os 创建单层文件夹,路径必须要存在 os.mkdir(路径 ...

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

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  7. python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)

    一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...

  8. python基础--json,pickle和shelve模块

    一.JSON &pickle 用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换  字符串必须是双引号,不能是单引号 pickle,用于python特有的类型 和 ...

  9. python基础语法12 内置模块 json,pickle,collections,openpyxl模块

    json模块 json模块: 是一个序列化模块. json: 是一个 “第三方” 的特殊数据格式. 可以将python数据类型 ----> json数据格式 ----> 字符串 ----& ...

  10. 第九节:os、sys、json、pickle、shelve模块

    OS模块: os.getcwd()获取当前路径os.chdir()改变目录os.curdir返回当前目录os.pardir()父目录os.makedirs('a/b/c')创建多层目录os.remov ...

随机推荐

  1. leetcode 4寻找两个有序数组的中位数

    最优解O(log(min(m,n))) /** 之前用合并有序数组的思想做了O((m+n+1)/2),现在试一试O(log(min(m,n))) 基本思路为:通过二分查找较小的数组得到对应的中位数(假 ...

  2. Git 版本管理工具命令速查

    转自:http://www.jb51.net/article/55442.htm 一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git comm ...

  3. Jmeter之线程组(Stepping和Ultimate)

    jmeter自带的线程组比较简单,如果需要逐渐增加并发数的功能并不能实现,所以就需要使用Jmeter插件--Stepping Thread Group. 一.安装Stepping/UItimate T ...

  4. 网易云课堂_C++程序设计入门(下)_第7单元:出入虽同趣,所向各有宜 – 文件输入和输出_第7单元 - 作业2:编程互评

    第7单元 - 作业2:编程互评 查看帮助 返回   提交作业(剩余10天) 完成并提交作业     作业批改 互评训练   互评作业   自评作业     成绩公布 查看成绩   由于在线编程不支持 ...

  5. 6.824 Lab 2: Raft 2A

    6.824 Lab 2: Raft Part 2A Due: Feb 23 at 11:59pm Part 2B Due: Mar 2 at 11:59pm Part 2C Due: Mar 9 at ...

  6. 各种开源许可 license 区别

    copy from http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html

  7. 函数 FUNCTION

    函数 FUNCTION 定义: 带名字的代码块,用于执行具体任务. 注意: 应给函数指定描述性名称,只是用小写字母和下划线. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何 ...

  8. javascript中的继承-寄生组合式继承

    前文说过,组合继承是javascript最常用的继承模式,不过,它也有自己的不足:组合继承无论在什么情况下,都会调用两次父类构造函数,一次是在创建子类原型的时候,另一次是在子类构造函数内部.子类最终会 ...

  9. The Frog's Games

    The Frog's Games Problem Description The annual Games in frogs' kingdom started again. The most famo ...

  10. KMP字符串匹配 模板 洛谷 P3375

    KMP字符串匹配 模板 洛谷 P3375 题意 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.(如果 ...