python-study-18

复习

上节课复习:
    1、包
        什么是包:包就是一个含有__init__.py文件的文件夹
        包是模块的一种形式,即包是用来被导入的,但包的本质就是一个文件夹(文件夹的作用就是用来存放文件的,包内所有的文件都是用来被导入使用的)
        import 包
        包.名字

        导入方式:
            1、绝对导入: 相对于执行文件所在的文件夹
            2、相对导入:相对于当前被导入的文件(只能用于模块之间的互相导入)
                .
                ..

    2、日志模块logging
        1、logger:产生日志
        2、filter
        3、handler:接收logger对象传来的日志,控制输出到不同的位置
        4、formatter:控制handler对象输出日志的格式

        debug 10
        info 20
        warning 30
        error 40
        critical 50

今日内容:
    序列化json与pickle
    时间模块time与datetime
    随机值random
    sys
    os
    re模块
View Code

logging

"""
logging配置
"""
import os
BASE_DIR=os.path.dirname(os.path.abspath(__file__))


# 定义三种日志输出格式 开始
standard_format = '%(asctime)s - %(filename)s:%(lineno)d - %(name)s - %(levelname)s - %(message)s'

simple_format = '%(asctime)s - %(levelname)s - %(message)s'

id_simple_format = '[%(asctime)s] %(message)s'


# log文件的全路径
logfile1_path = os.path.join(BASE_DIR,'a1.log')
logfile2_path = os.path.join(BASE_DIR,'a2.log')
logfile3_path = os.path.join(BASE_DIR,'a3.log')
logfile4_path = os.path.join(BASE_DIR,'a4.log')

# log配置字典
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'formatter1': {
            'format': standard_format
        },
        'formatter2': {
            'format': simple_format
        },
    },
    'filters': {},
    'handlers': {
        #打印到终端的日志
        'sm': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'formatter2'
        },
        #打印到文件的日志,收集info及以上的日志
        'h1': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',  # 保存到文件
            'formatter': 'formatter1',
            'filename': logfile1_path,  # 日志文件
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
        'h2': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',  # 保存到文件
            'formatter': 'formatter1',
            'filename': logfile2_path,  # 日志文件
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
        'h3': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',  # 保存到文件
            'formatter': 'formatter1',
            'filename': logfile3_path,  # 日志文件
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
        'h4': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',  # 保存到文件
            'formatter': 'formatter1',
            'filename': logfile4_path,  # 日志文件
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },

    },
    'loggers': {
        #logging.getLogger(__name__)拿到的logger配置
        '': {
            'handlers': ['h1','h2','sm','h4'],
            'level': 'DEBUG',
            'propagate': False,  # 向上(更高level的logger)传递
        },
        'egon':{
            'handlers': ['h3',],
            'level': 'DEBUG',
            'propagate': False,  # 向上(更高level的logger)传递
        },
    },
}
settings
import logging.config
from dir1.dir2 import settings

logging.config.dictConfig(settings.LOGGING_DIC)

logger1=logging.getLogger('用户相关') #name='用户相关'
logger2=logging.getLogger('交易日志') #name='交易日志'
logger3=logging.getLogger('egon') #name='交易日志'
logger4 = logging.getLogger('徐金金测试')

logger1.info('xxx登陆成功')
logger2.info('Egon给李杰转账100块')
logger3.info('egon。。。。。。。。。。。。')
logger4.info('test ...........')





try:
    print(1)
    print(2)
    print(3)
    xxxxx
except NameError as e: # e="name 'xxxxx' is not defined"
    logger1.error(e)


print(4)
print(5)
print(6)
run.py

json pickle

01 什么是序列化/反序列化
    序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于网络传输
    反序列化就是硬盘中或者网络中传来的一种数据格式转换成内存中数据结构

02 为什要有
    1、可以保存程序的运行状态
    2、数据的跨平台交互

03 怎么用
    json
        优点:
            跨平台性强
        缺点:
            只能支持/对应python部分的数据类型(元组 集合 不支持)

    pickle
        优点:
            可以支持/对应所有python的数据类型
        缺点:
            只能被python识别,不能跨平台
笔记
# import json

# dic={'name':'egon','age':18,'sex':'male'}
#序列化:内存中的数据类型------>中间格式json

# # 1、序列化得到json_str
# json_str=json.dumps(dic)
# print(dic,type(dic))
# print(json_str,type(json_str))
# # 2、把json_str写入文件
# with open('db.json','wt',encoding='utf-8') as f:
#     f.write(json_str)

#1和2合为一步
# with open('db.json','wt',encoding='utf-8') as f:
#     json.dump(dic,f)

# print(json_str,type(json_str)) # json格式不能识别单引号,全都是双引号

#原值没有改变 json.dumps json.dump
json序列化
# import json

#反序列化:中间格式json-----》内存中的数据类型

# #1、从文件中读取json_str
# with open('db.json','rt',encoding='utf-8') as f:
#     json_str=f.read()
# #2、将json_str转成内存中的数据类型
# dic=json.loads(json_str)

#1和2可以合作一步
# with open('db.json','rt',encoding='utf-8') as f:
#     dic=json.load(f)
#
# print(dic['sex'])

#ps:json.loads json.load
json反序列化
# json格式不能识别单引号,全都是双引号

# import json

# with open('db1.json','rt',encoding='utf-8') as f:
#     json.load(f)

# json.loads('{"name":"egon"}')

# with open('db.json','wt',encoding='utf-8') as f:
#     l=[1,True,None]
#     json.dump(l,f)

# 用json反序列化
# with open('db.json','rt',encoding='utf-8') as f:
#     l=json.load(f)
#     print(l)

# 用eval反列化
# with open('db.json','rt',encoding='utf-8') as f:
#     s=f.read() #s ='[1, true, null]'
#     dic=eval(s) #eval('[1, true, null]')
#     print(dic['name'])

#ps: json eval
json注意点
# import pickle

# dic={'a':1,'b':2,'c':3}
# #1 序列化
# pkl=pickle.dumps(dic)
# print(pkl,type(pkl))
# print(dic,type(dic))
#
# #2 写入文件
# with open('db.pkl','wb') as f:
#     f.write(pkl)

#1和2可以合作一步
# with open('db.pkl','wb') as f:
#     pickle.dump(dic,f)

#ps: pickle.dumps pickle.dump  bytes数据类型
pickle序列化
# import pickle


# # #1、从文件中读取pickle格式
# with open('db.pkl','rb') as f:
#     pkl=f.read()
# #2、将json_str转成内存中的数据类型
# dic=pickle.loads(pkl)
# print(dic['a'])

#1和2可以合作一步
# with open('db.pkl','rb') as f:
#     dic=pickle.load(f)
# #
# print(dic,dic['a'])


# import json,pickle
#json 不支持元组 集合
# s={1,2,3}
# json.dumps(s)
# pickle.dumps(s)

#ps: pickle.loads pickle.load
pickle反序列化

time datetime

# import time
# 时间分为三种格式
#1、时间戳
# start= time.time()
# time.sleep(3)
# stop= time.time()
# print(stop - start)

#2、格式化的字符串形式
# print(time.strftime('%Y-%m-%d %X'))
# print(time.strftime('%Y-%m-%d %H:%M:%S %p'))

#3、 结构化的时间/时间对象
# t1=time.localtime()
# print(t1)
# print(type(t1.tm_min))
# print(t1.tm_mday)

# t2=time.gmtime()
# print(t1)
# print(t2)

# 时间转换
# print(time.localtime(123123123))
# print(time.gmtime(123123123))

# print(time.mktime(time.localtime()))

# print(time.strftime('%Y',time.localtime()))
# print(time.strptime('2011-03-07','%Y-%d-%m'))


# print(time.asctime())
# print(time.ctime())
# print(time.strftime('%a %b %d %H:%M:%S %Y'))

# print(time.asctime(time.localtime()))
# print(time.ctime(123123123))

# print(time.strftime('%Y-%m-%d %X'))


# 获取格式化字符串形式的时间麻烦
# 时间戳与格式化时间之间的转换麻烦
# 获取之前或者未来的时间麻烦
# import datetime

# print(datetime.datetime.now())
# print(datetime.datetime.fromtimestamp(1231233213))

# print(datetime.datetime.now() + datetime.timedelta(days=3))
# print(datetime.datetime.now() + datetime.timedelta(days=-3))

# s=datetime.datetime.now()
# print(s.replace(year=2020))
View Code

random

import random

# print(random.random())
# print(random.randint(1,3))
# print(random.randrange(1,3))
# print(random.choice([1,'egon',[1,2]]))
# print(random.sample([1, 'aa', [4, 5]], 2))

# print(random.uniform(1,3))

# item=['a','b','c','d']
# random.shuffle(item)
# print(item)
View Code

os

# import os

# print(os.getcwd())

# print(os.listdir(r'D:\s2视频目录\day18'))
# print(os.listdir('.'))
# print(os.listdir('..'))

# os.chdir(r'D:\s2视频目录\day08')
# print(os.getcwd())

# print(os.listdir(r'D:\s2视频目录\day08'))
# print(os.listdir(r'.'))

# os.mkdir(r'a')
# os.mkdir(r'a/b')
# os.mkdir(r'a/b/c')

# os.makedirs(r'a\b\c\d\e\f')
# os.rmdir(r'a\b\c\d\e\f')
# os.removedirs(r'a\b\c\d\e\f')

# obj=os.stat(r'D:\s2视频目录\day18\run.py')
# print(obj)

# print(os.sep)
# print(os.linesep)
# print(os.pathsep)

# import time,os
# print(os.getpid())
# time.sleep(500)

# res=os.system('taskliasdfst')
# print('结果是:',res)


# import json
#
# # 当程序所有的文件都需要引用一个变量时,则需要将该变量加入环境变量中
# os.environ['x']=json.dumps(['a','b','c'])
# print(json.loads(os.environ['x'])[0])






# print(os.path.split(r'D:\s2视频目录\day18\03 random模块.py'))
# print(os.path.dirname(r'D:\s2视频目录\day18\03 random模块.py'))
# print(os.path.basename(r'D:\s2视频目录\day18\03 random模块.py'))




# print(os.path.isabs(r'C:\a\b.txt'))
# print(os.path.isabs(r'a\b.txt'))

# print(os.path.isabs('/a/b/c.txt'))
# print(os.path.isabs('a/b/c.txt'))

# print(os.path.join('C:\\','a','D:\\','b','F:\\','c.txt'))

print(os.path.getsize(r'D:\s2视频目录\day18\02 时间模块.py')) #字节
View Code

参考:http://www.cnblogs.com/linhaifeng/articles/6384466.html#_label3

猜你喜欢

转载自www.cnblogs.com/xujinjin18/p/9204905.html
今日推荐