time sys json模塊

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章