day8 模块导入及时间模块和序列化模块

模块

  • 包是通过使用".模块名"来组织Python模块名称空间的方式.具体来说就是一个包含"_init_.py"

文件的文件夹。

  • 目的:用文件夹将文件/模块组织起来。

    • 创建包不是为了用来运行,而是为了让别人来引用,包的本质也是模块
  • 注意

    • python3中,如果没有"_init_.py"也可以使用
    • python2种没有此文件必定报错
  • 使用时,使用 import 导入。

    • 使用import导入文件时,产生名称空间的名字源于文件,import导入包时,名称空间的名字同样来源于文件,导入包的本质就是导入其中的_init_.py文件
➜  test tree
.
├── api
│   ├── __init__.py
│   ├── students.py
│   └── versions.py
├── cmd
│   ├── __init__.py
│   └── manage.py
├── db
│   ├── __init__.py
│   └── models.py
└── __init__.py

按照以上结构创建一个命为test的多层包

对每一层的_init_.py文件进行配置

test文件夹下的_init_.py文件

from . import cmd,db,api

api下的_init_.py文件

from . import students,versions

cmd下的_init_.py文件

from . import manage

db下的_init_.py文件

from . import models

此时导入包后直接可以调用.py文件里的函数

import test
test.cmd.manage.main()


#from manage.py

manage.py:

def main():
    print("from manage.py")

相对导入与绝对导入

绝对导入的格式为 import A.B 或 from A import B,相对导入格式为 from .A import B 或 from …X import Y,. 代表当前模块, 代表上层模块, 代表上上层模块,依次类推。

在test/api/versions.py中导入test/cmd/manage

from test.api import *
a=10
versions.manage.main()

#from manage.py

manage.py

def main():
    print("from manage.py")

versions.py

from ..cmd import manage
def create_resource(conf):
    print("from versions.py",conf)

字符编码

time 模块

表示时间的3种方式

  • 返回当前时间戳(timetamp :从1970/01/01的0点开始计算到目标时间经过的秒数)
  • 格式化的时间字符串(format string)
  • 结构化的时间(struct_time) → 元组,9个元素, (年月日时分秒,一年的第几周,一年的第几天,时令)

python中时间日期格式化符号:

符号意义
%y两位数的年份表示(00-99)
%Y四位数的年份表示(000-9999)
%m月份(01-12)
%d月内中的一天(0-31)
%H24小时制小时数(0-23)
%I12小时制小时数(01-12)
%M分钟数(00=59)
%S秒(00-59)
%a本地简化星期名称
%A本地完整星期名称
%b本地简化的月份名称
%B本地完整的月份名称
%c本地相应的日期表示和时间表示
%j年内的一天(001-366)
%p本地A.M.或P.M.的等价符
%U一年中的星期数(00-53)星期天为星期的开始
%w星期(0-6),星期天为星期的开始
%W一年中的星期数(00-53)星期一为星期的开始
%x本地相应的日期表示
%X本地相应的时间表示
%Z当前时区的名称
%%%号本身

time模块的常用方法

方法描述
time.localtime([sec])将一个时间戳转化为当前时区的struct_tme(若未提供参数,为当前时间)
time.gmtime([sec])和localtime()类似,不同的是,其将一个时间戳转换为UTC时区(0时区的struct_time)
time.time()返回当前时间戳
time.mktime(t)将time.struct_time转化为时间戳
time.sleep(sec)线程推迟指定的时间运行,单位(s)
time.asctime([t])把表示时间的元组或者struct_time表示为:"星期 月份 日期 时:分:秒"的格式如果未传参数,默认未time.localtime()
time.ctime([t])把一个时间戳转化为time.asctime()的形式。如果未传参数,默认为time.time()
time.strftime(format[,t])把一个代表时间的元组/struct_time/localtime()或者gmtime()转为格式化的字符串,未传参则默认为time.localtime()
time.strptime()将结构化字符串转化为struct_time格式

时间戳转为结构化时间

  • time.gmtime()
  • time.localtime()
import time
now=time.time()
print(time.gmtime(now))
print(time.localtime(now))

#time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=1, tm_min=22, tm_sec=11, tm_wday=4, tm_yday=207, tm_isdst=0)
#time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=9, tm_min=22, tm_sec=11, tm_wday=4, tm_yday=207, tm_isdst=0)

结构化时间转为时间戳

  • time.mktime()
import time
now=time.gmtime(time.time())
print(time.mktime(now))

#1564075517.0

结构化时间转为字符串时间

  • time.strftime()
import time
now=time.gmtime(time.time())
print(time.strftime("%Y-%m-%d %X",now))

#2019-07-26 01:28:46
  • time.asctime()
import time
now=time.gmtime(time.time())
print(time.asctime(now))

#Fri Jul 26 01:52:27 2019

字符串时间转为结构化时间

  • time.strptime()
import time
print(time.strptime("2017-07-26","%Y-%m-%d"))

#time.struct_time(tm_year=2017, tm_mon=7, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=207, tm_isdst=-1)

datetime 模块

相比time来说,datetime模块接口更直观,更容易调用

方法描述
datetime.date表示日期(类),常用属性year,month,day
datetime.time表示时间(类),常用属性hour,minute,second,microsecond
datetime.datetime表示日期
datetime.timedate表示时间间隔
datetime.tzinfo与时区有关的信息

序列化模块

序列化:

  • 将一个对象从内存种转换为可存储(字符串类型)或者可传输(bytes)类型的过程。
  • Python中叫pickling

作用:

  • 持久化数据类型
  • 跨平台交互使用
  • 使程序更容易维护

json

json格式在各个

json类型python类型
{}dict
[]list
“string”str
1234.56int/float
true/falseTrue/False
nullNone

json优缺点

  • 优点:所有的数据类型使各语言通用的。
  • 缺点:
    • json只支持比较少的数据类型
    • 对数据类型的约束十分严格
      • 字典中的key必须是字符串
      • json只支持列表,字典,数值…

json的四种方法:

  • dump()
  • dumps()
  • load()
  • loads()

序列化,反序列化过程(如果是元组,序列化时强转为列表,如果元组为字典的key则报错):

import json
dic={'name':'tom','age':16,'job':'student'}
dic_json=json.dumps(dic)    #序列化
print(dic,type(dic))
print(dic_json,type(dic_json))
dic2=json.loads(dic_json)   #反序列化
print(dic2,type(dic2))


#{'name': 'tom', 'age': 16, 'job': 'student'} <class 'dict'>
#{"name": "tom", "age": 16, "job": "student"} <class 'str'>
#{'name': 'tom', 'age': 16, 'job': 'student'} <class 'dict'>

查看json的方法和属性

pickle

只用于python

内存中结构化的数据 格式pickle bytes类型 保存在文件或基于网络传输
pickle优缺点:

  • 优点
    • 支持python中的几乎所有的类型
    • pickle会把数据类型序列化为bytes类型
  • 缺点
    • 支支持python

模块提供四个功能:

  • 序列化
    • dumps()
    • dump()
  • 反序列化
    • loads()
    • load()
import pickle
dic={'name':'tom','age':16,'job':'student'}
dic_json=pickle.dumps(dic)
print(dic,type(dic))
print(dic_json,type(dic_json))
dic2=pickle.loads(dic_json)
print(dic2,type(dic2))

#{'name': 'tom', 'age': 16, 'job': 'student'} <class 'dict'>
#b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00tomq\x02X\x03\x00\x00\x00ageq\x03K\x10X\x03\x00\x00\x00jobq\x04X\x07\x00\x00\x00studentq\x05u.' <class 'bytes'>
#{'name': 'tom', 'age': 16, 'job': 'student'} <class 'dict'>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值