文章目录
模块
包
- 包是通过使用".模块名"来组织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
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
def main():
print("from manage.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) |
%H | 24小时制小时数(0-23) |
%I | 12小时制小时数(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.56 | int/float |
true/false | True/False |
null | None |
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'>