Time 模塊
導入
import time
常用函數
函數 | 功能 |
---|---|
time.sleep([n]) | 休眠n秒,線程推遲指定時間運行 (阻塞函數,程序將在此處停止) |
time.time() | 返回當前時間戳(1970.0 0點起)單位爲秒(浮點型) |
time.localtime([sec]) | 將一個時間戳轉化爲一個當前時區的struct_time(未提供參數,爲當前時間) |
time.gmtime([sec]) | 和localtime類似,區別爲將時間戳轉化爲UTC時區(0時區)的struct_time |
time.mktime(t) | 將time.struct_time轉化爲時間戳 |
time.asctime([t]) | 將時間的元組或struct_time 表示爲:‘Sun(星期) July(月份) 26(日期) 09:10:02(時間) 2019(年份)’,未傳參數,默認time.locatime() |
time.ctime([t]) | 把時間戳轉化爲time.asctime()的格式,默認time.time() |
time.stftime(format[,t]) | 把一個代表時間的元組/struct_time(locatime(),gmtime())轉化爲格式化字符串,未傳參數,默認爲time.localtime() |
time.strptime() | 將格式化字符串轉換爲struct_time的格式 |
在python中表示時間的方式:
- 時間戳(timetamp):表示從1970.01.01 00:00:00開始按秒計算的偏移量,計算機識別
- 格式化的時間字符串(format string),可以便於人獲取時間
- 結構化的時間(struct_time)---->結構元組,9個元素(年月日,時分秒,一年的第幾周,第幾天,夏令時),可以對時間操作
import time
print(time.time())
print(time.strftime('%Y-%m-%d %X %p'))
print(time.localtime()[:])
1564102814.5391111
2019-07-26 09:00:14 AM
(2019, 7, 26, 9, 0, 14, 4, 207, 0)
字符串時間的符號
符號 | 含義 |
---|---|
%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 | 當前時區的名稱 |
%% | %號本身 |
時間格式的轉化
時間戳轉化我結構化時間
import time
now=time.time()
print(time.gmtime(now)) ##0時區
print(time.localtime(now)) ##當地時區(東八區)
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=1, tm_min=20, tm_sec=55, 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=20, tm_sec=55, tm_wday=4, tm_yday=207, tm_isdst=0)
結構化時間轉化爲時間戳
import time
sp_struct=time.localtime()
print(time.time(),time.mktime(sp_struct))
1564104250.1320517 1564104250.0
結構化時間轉化爲字符串時間
import time
tp_struct=time.localtime()
print(time.strftime('%Y-%m-%d %X',tp_struct))
2019-07-26 09:27:23
字符串時間轉化爲結構化數據
import time
print(time.strptime('2019-07-26 09:30:01','%Y-%m-%d %X'))
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=9, tm_min=30, tm_sec=1, tm_wday=4, tm_yday=207, tm_isdst=-1)
結構化時間及時間戳轉換成字符串(另一形式)
import time
tp_struct=time.localtime()
print(time.asctime(tp_struct)) ##結構化時間
print(time.ctime(time.time())) ##時間戳
Fri Jul 26 09:49:21 2019
Fri Jul 26 09:49:21 2019
datetime 模塊
與time模塊比較而言,datetime模塊接口更直觀,更容易調用
方法(類) | 描述 |
---|---|
datetime.date | 表示日期(類),常用屬性 year month day |
datetime.time | 表示時間(類),常用屬性 hour,minute,second,microsecond(微秒) |
datetime.datetime | 表示日期 |
datetime.timedelta | 表示時間間隔 |
datetime.tzinfo | 與時區有關的信息 |
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2019, 7, 26, 10, 4, 42, 700190)
>>> datetime.datetime.now().date()
datetime.date(2019, 7, 26)
>>> datetime.datetime.now().time()
datetime.time(10, 5, 30, 9043)
>>> print(datetime.datetime.now())
2019-07-26 10:05:50.047827
>>> print(datetime.datetime.now()+datetime.timedelta(hours=1)) #1小數以後
2019-07-26 11:07:17.392208
sys 模塊
sys模塊是與python解釋器交互的一個接口
處理命令行參數
在解釋器啓動後,argv列表包含了傳遞腳本的所有參數,列表的第一個元素是腳本的名稱
函數 | 作用(返回值) |
---|---|
byteorder | python解釋器有關的版本信息 |
copyright | python解釋器在磁盤的存儲路徑 |
executable | 當前系統上保存文件所用的字符集 |
getfilesstemencoding | python整數支持的最大值 |
maxsize | python解釋器所在版本信息 |
platform | python解釋器的版本信息 |
version | python解釋器的主版本號 |
>>> sys.version #python的版本
'3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)]'
>>> sys.path #python的環境
['', 'D:\\python\\python3.7\\Lib\\idlelib', 'D:\\python\\python3.7\\python37.zip', 'D:\\python\\python3.7\\DLLs', 'D:\\python\\python3.7\\lib', 'D:\\python\\python3.7', 'D:\\python\\python3.7\\lib\\site-packages']
##第一個''表示當前的運行,由於在終端所有爲空
通過sys.path.append(地址),可以添加一個.py文件到環境裏,之後可以直接import調用
序列化模塊
概念
將一個對象(數據)從內存中轉換成可存儲(字符串類型)或者可傳輸(bytes)類型的過程
python 中叫pickling
作用
- 持久化數據類型
- 跨平臺交互使用
- 使程序更易於維護
json
json格式在各個語言中都可以通用的序列化格式.在json中,所有的字符串只能使用""(雙引號).
json類型 | python類型 |
---|---|
{} | 字典(dict) |
[] | 列表(list) |
123/1.1 | int/float(數字) |
true/false | True/False(bool) |
null | None |
優缺點
-
優點:所有數據類型支持多種語言
-
缺點
- 支持數據類型較少
- 對於數據類型要求嚴格
- 對於字典,其鍵只能是字符串,非字符串(數字)會強轉成字符串
- 只支持字典,列表,數字,布爾型
功能
- dumps loads
import json
dic={'name':"bob","age":16,"job":'student',2:'a'}
sr_dic=json.dumps(dic) ##序列化,將字典轉化爲一個字符串
print(sr_dic,type(sr_dic))
sr=json.loads(sr_dic)#反序列化,將字符串轉化成一個字典
print(sr,type(sr))
{"name": "bob", "age": 16, "job": "student", "2": "a"} <class 'str'>
{'name': 'bob', 'age': 16, 'job': 'student', '2': 'a'} <class 'dict'>
如果是元組,序列化時強轉爲列表;若元組作爲字典的鍵序列化時報錯
- dump load
如果直接把數據類型直接序列化寫入文件,可以用dump和load
import json
dic={'name':"bob","age":16,"job":'student',2:'a'}
with open('dump_json','w') as f:
json.dump(dic,f)##dump方法可以接收一個文件句柄。直接將字典轉化字符串並寫入文件中
with open('dump_json') as f:
ret=json.load(f)
print(ret,type(ret))
{'name': 'bob', 'age': 16, 'job': 'student', '2': 'a'} <class 'dict'>
在與該.py文件同級生成了一個dump—json文件
{"name": "bob", "age": 16, "job": "student", "2": "a"}
#用txt打開該文件
json自帶解碼方式,如果內容含中文,會出現亂碼,所有可以關閉其解碼
import json
dic2={'名字':'bob','年齡':17}
print(json.dumps(dic2))
print(json.dumps(dic2,ensure_ascii=False))
{"\u540d\u5b57": "bob", "\u5e74\u9f84": 17}
{"名字": "bob", "年齡": 17}
pickle
該數據結構只支持python
內存中結構化的數據<---->格式pickle<---->bytes類型<---->保存在文件或基於網絡傳輸
優缺點
-
優點
- 支持python中幾乎所有類型
- pickle會把數據類型序列化爲bytes類型
-
缺點
- 只支持python
功能
-
序列化
- dumps
- dump
-
反序列化a
- loads
- load
dumps和loads
import pickle
dic={"name": "bob", "age": 16, "job": "student", 2: "a"}
dic_d=pickle.dumps(dic)
print(dic_d,type(dic_d))
dic_l=pickle.loads(dic_d)
print(dic_l,type(dic_l))
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00bobq\x02X\x03\x00\x00\x00ageq\x03K\x10X\x03\x00\x00\x00jobq\x04X\x07\x00\x00\x00studentq\x05K\x02X\x01\x00\x00\x00aq\x06u.' <class 'bytes'> ###保存格式爲2進制
{'name': 'bob', 'age': 16, 'job': 'student', 2: 'a'} <class 'dict'>
dump和load
import pickle
dic={"name": "bob", "age": 16, "job": "student", 2: "a"}
with open('dump_pickle','wb')as f:
pickle.dump(dic,f)
with open('dump_pickle','rb') as f:
tu=pickle.load(f)
print(tu)
{'name': 'bob', 'age': 16, 'job': 'student', 2: 'a'}
pickle.dump()後會以2進制保存,mode用’w’和’r’時會報錯,‘write() argument must be str, not bytes’。要用’wb’和’wr’。'b’時的錯誤:‘gbk’ codec can’t decode byte 0x80 in position 0: illegal multibyte sequence
€}q(XnameqXbobqXageqKXjobqXstudentqKXaqu.
txt格式打開dump_pickle