目錄java
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)
如上圖所示,咱們總能經過某些方法在結構化時間-格式化時間-時間戳三者之間進行轉換,下面咱們將用代碼展現如何經過這些方法轉換時間格式。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模塊通常用於時間的加減。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.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模塊負責程序與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序列化並非python獨有的,json序列化在java等語言中也會涉及到,所以使用json序列化可以達到跨平臺傳輸數據的目的。學習
json數據類型和python數據類型對應關係表
Json類型 | Python類型 |
---|---|
{} | dict |
[] | list |
"string" | str |
520.13 | int或float |
true/false | True/False |
null | None |
json模塊序列化和反序列化的一個過程以下圖所示
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序列化和全部其餘編程語言特有的序列化問題同樣,它只能用於Python,而且可能不一樣版本的Python彼此都不兼容,所以,只能用Pickle保存那些不重要的數據,即不能成功地反序列化也不要緊。可是pickle的好處是能夠存儲Python中的全部的數據類型,包括對象,而json不能夠。
pickle模塊序列化和反序列化的過程以下圖所示
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'}