day17學習整理-Python模塊

2019/08/16 學習整理

函數進階(模塊)

time模塊

time模塊通常用於不一樣時間格式的轉換。python

import time

時間戳

時間戳(timestamp):時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。shell

time_stamp = time.time()
print(time_stamp, type(time_stamp))
1552551519.291029 <class 'float'>

格式化時間

格式化的時間字符串(format string):格式化時間表示的是普通的字符串格式的時間。編程

format_time = time.strftime("%Y-%m-%d %X")
print(format_time, type(format_time))
2019-03-07 16:22:11 <class 'str'>

結構化時間

結構化的時間(struct time):struct_time元組共有9個元素共九個元素,分別爲(年,月,日,時,分,秒,一年中第幾周,一年中第幾天,夏令時)json

print('本地時區的struct_time:\n{}'.format(time.localtime()))
print('UTC時區的struct_time:\n{}'.format(time.gmtime()))
本地時區的struct_time:
time.struct_time(tm_year=2019, tm_mon=3, tm_mday=7, tm_hour=16, tm_min=22, tm_sec=11, tm_wday=3, tm_yday=66, tm_isdst=0)
UTC時區的struct_time:
time.struct_time(tm_year=2019, tm_mon=3, tm_mday=7, tm_hour=8, tm_min=22, tm_sec=11, tm_wday=3, tm_yday=66, tm_isdst=0)
# 結構化時間的基準時間
print(time.localtime(0))
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
# 結構化時間的基準時間上增長一年時間
print(time.localtime(3600*24*365))
time.struct_time(tm_year=1971, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=1, tm_isdst=0)

不一樣格式時間的轉換

66time模塊-時間格式轉換.jpg

如上圖所示,咱們總能經過某些方法在結構化時間-格式化時間-時間戳三者之間進行轉換,下面咱們將用代碼展現如何經過這些方法轉換時間格式。api

# 結構化時間
now_time = time.localtime()
print(now_time)
time.struct_time(tm_year=2019, tm_mon=3, tm_mday=7, tm_hour=16, tm_min=22, tm_sec=11, tm_wday=3, tm_yday=66, tm_isdst=0)
# 把結構化時間轉換爲時間戳格式
print(time.mktime(now_time))
1551946931.0
# 把結構化時間轉換爲格式化時間
# %Y年-%m月-%d天 %X時分秒=%H時:%M分:%S秒
print(time.strftime("%Y-%m-%d %X", now_time))
2019-03-07 16:22:11
# 把格式化時間化爲結構化時間,它和strftime()是逆操做
print(time.strptime('2013-05-20 13:14:52', '%Y-%m-%d %X'))
time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=13, tm_min=14, tm_sec=52, tm_wday=0, tm_yday=140, tm_isdst=-1)
# 把結構化時間表示爲這種形式:'Sun Jun 20 23:21:05 1993'。
print(time.asctime())
Thu Mar  7 16:22:11 2019
# 若是沒有參數,將會將time.localtime()做爲參數傳入。
print(time.asctime(time.localtime()))
Thu Mar  7 16:22:11 2019
# 把一個時間戳轉化爲time.asctime()的形式。
print(time.ctime())
Thu Mar  7 16:22:11 2019
# 若是參數未給或者爲None的時候,將會默認time.time()爲參數。它的做用至關於time.asctime(time.localtime(secs))。
print(time.ctime(time.time()))
Thu Mar  7 16:22:11 2019

其餘用法

# 推遲指定的時間運行,單位爲秒
start = time.time()
time.sleep(3)
end = time.time()

print(end-start)
3.0005428791046143

datetime模塊

datetime模塊通常用於時間的加減。bash

# datetime模塊能夠當作是時間加減的模塊
import datetime
# 返回當前時間
print(datetime.datetime.now())
2019-03-07 16:22:14.544130
print(datetime.date.fromtimestamp(time.time()))
2019-03-07
# 當前時間+3天
print(datetime.datetime.now() + datetime.timedelta(3))
2019-03-10 16:22:14.560599
# 當前時間-3天
print(datetime.datetime.now() + datetime.timedelta(-3))
2019-03-04 16:22:14.568473
# 當前時間-3小時
print(datetime.datetime.now() + datetime.timedelta(hours=3))
2019-03-07 19:22:14.575881
# 當前時間+30分鐘
print(datetime.datetime.now() + datetime.timedelta(minutes=30))
2019-03-07 16:52:14.585432
# 時間替換
c_time = datetime.datetime.now()
print(c_time.replace(minute=20, hour=5, second=13))
2019-03-07 05:20:13.595493

os模塊

os模塊負責程序與操做系統交互,多用於文件處理。編程語言

方法 詳解
os.getcwd() 獲取當前工做目錄,即當前python腳本工做的目錄路徑
os.chdir("dirname") 改變當前腳本工做目錄;至關於shell下cd
os.curdir 返回當前目錄: ('.')
os.pardir 獲取當前目錄的父目錄字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄
os.removedirs('dirname1') 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推
os.mkdir('dirname') 生成單級目錄;至關於shell中mkdir dirname
os.rmdir('dirname') 刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname
os.listdir('dirname') 列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印
os.remove() 刪除一個文件
os.rename("oldname","newname") 重命名文件/目錄
os.stat('path/filename') 獲取文件/目錄信息
os.sep 輸出操做系統特定的路徑分隔符,win下爲"\",Linux下爲"/"
os.linesep 輸出當前平臺使用的行終止符,win下爲"\t\n",Linux下爲"\n"
os.pathsep 輸出用於分割文件路徑的字符串 win下爲;,Linux下爲:
os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'
os.system("bash command") 運行shell命令,直接顯示
os.environ 獲取系統環境變量
os.path.abspath(path) 返回path規範化的絕對路徑
os.path.split(path) 將path分割成目錄和文件名二元組返回
os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素
os.path.basename(path) 返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素
os.path.exists(path) 若是path存在,返回True;若是path不存在,返回False
os.path.isabs(path) 若是path是絕對路徑,返回True
os.path.isfile(path) 若是path是一個存在的文件,返回True。不然返回False
os.path.isdir(path) 若是path是一個存在的目錄,則返回True。不然返回False
os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略
os.path.getatime(path) 返回path所指向的文件或者目錄的最後存取時間
os.path.getmtime(path) 返回path所指向的文件或者目錄的最後修改時間
os.path.getsize(path) 返回path的大小

sys模塊

sys模塊負責程序與Python解釋器進行交互,多用於處理環境變量。函數

方法 詳解
sys.argv 命令行參數List,第一個元素是程序自己路徑
sys.modules.keys() 返回全部已經導入的模塊列表
sys.exc_info() 獲取當前正在處理的異常類,exc_type、exc_value、exc_traceback當前處理的異常詳細信息
sys.exit(n) 退出程序,正常退出時exit(0)
sys.hexversion 獲取Python解釋程序的版本值,16進制格式如:0x020403F0
sys.version 獲取Python解釋程序的版本信息
sys.maxint 最大的Int值
sys.maxunicode 最大的Unicode值
sys.modules 返回系統導入的模塊字段,key是模塊名,value是模塊
sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
sys.platform 返回操做系統平臺名稱
sys.stdout 標準輸出
sys.stdin 標準輸入
sys.stderr 錯誤輸出
sys.exc_clear() 用來清除當前線程所出現的當前的或最近的錯誤信息
sys.exec_prefix 返回平臺獨立的python文件安裝的位置
sys.byteorder 本地字節規則的指示器,big-endian平臺的值是'big',little-endian平臺的值是'little'
sys.copyright 記錄python版權相關的東西
sys.api_version 解釋器的C的API版本

json模塊

json:

Json序列化並非python獨有的,json序列化在java等語言中也會涉及到,所以使用json序列化可以達到跨平臺傳輸數據的目的。學習

json數據類型和python數據類型對應關係表

Json類型 Python類型
{} dict
[] list
"string" str
520.13 int或float
true/false True/False
null None

json模塊序列化和反序列化的一個過程以下圖所示

71json和pickle模塊-json.jpg

import json
struct_data = {'name': 'json', 'age': 23, 'sex': 'male'}
print(struct_data, type(struct_data))
{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>
data = json.dumps(struct_data)
print(data, type(data))
{"name": "json", "age": 23, "sex": "male"} <class 'str'>
# 注意:不管數據是怎樣建立的,只要知足json格式(若是是字典,則字典內元素都是雙引號),就能夠json.loads出來,不必定非要dumps的數據才能loads
data = json.loads(data)
print(data, type(data))
{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>
# 序列化
with open('Json序列化對象.json', 'w') as fw:
    json.dump(struct_data, fw)
# 反序列化
with open('Json序列化對象.json') as fr:
    data = json.load(fr)
print(data)
{'name': 'json', 'age': 23, 'sex': 'male'}

pickle模塊

pickle:

Pickle序列化和全部其餘編程語言特有的序列化問題同樣,它只能用於Python,而且可能不一樣版本的Python彼此都不兼容,所以,只能用Pickle保存那些不重要的數據,即不能成功地反序列化也不要緊。可是pickle的好處是能夠存儲Python中的全部的數據類型,包括對象,而json不能夠。

pickle模塊序列化和反序列化的過程以下圖所示

71json和pickle模塊-pickle.jpg

import pickle
struct_data = {'name': 'json', 'age': 23, 'sex': 'male'}
print(struct_data, type(struct_data))
{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>
data = pickle.dumps(struct_data)
print(data, type(data))
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00jsonq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x03\x00\x00\x00sexq\x04X\x04\x00\x00\x00maleq\x05u.' <class 'bytes'>
data = pickle.loads(data)
print(data, type(data))
{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>
# 序列化(注意:pickle模塊須要使用二進制存儲,即'wb'模式存儲)
with open('Pickle序列化對象.pkl', 'wb') as fw:
    pickle.dump(struct_data, fw)
# 反序列化
with open('Pickle序列化對象.pkl', 'rb') as fr:
    pickle = pickle.load(fr)
print(data)
{'name': 'json', 'age': 23, 'sex': 'male'}
相關文章
相關標籤/搜索