Python入門到逆襲6(基礎篇4)
技術標籤:python入門到逆襲pythonlinuxmysqlhttpredis
1.時間操作
時間相關的操作主要有time和datetime兩個系統庫。
1.1Time
time庫主要用到的是獲取當前時間戳、本地當前時間、時間轉字串和休眠函式。
時間戳:(時間戳和時間是對等關係)
cur_time = time.time()
當前時間戳 : 1615118649.66
可以參照這個地址轉換
http://tool.chinaz.com/Tools/unixtime.aspx?jdfwkey=zfpdi&qq-pf-to=pcqq.c2c
當前系統時間 :
localtime = time.localtime() print('本地時間 : {}'.format(localtime)) print('本地時間 : {}-{}-{} {}:{}:{}'.format(localtime.tm_year, localtime.tm_mon, localtime.tm_mday, localtime.tm_hour, localtime.tm_min, localtime.tm_sec)) str_time = time.strftime("%Y-%m-%d %H:%M:%S", localtime) print('本地時間 : {}'.format(str_time)) 結果 : 本地時間 : time.struct_time(tm_year=2021, tm_mon=1, tm_mday=27, tm_hour=17, tm_min=53, tm_sec=7, tm_wday=2, tm_yday=27, tm_isdst=0) 本地時間 : 2021-1-27 17:53:7 本地時間 : 2021-01-27 17:53:07
解釋 :
time.localtime()返回一個time.struct_time物件,物件成員如下:
tm_year | 2008 |
tm_mon | 1 到 12 |
tm_mday | 1 到 31 |
tm_hour | 0 到 23 |
tm_min | 0 到 59 |
tm_sec | 0 到 61 (60或61 是閏秒) |
tm_wday | 0到6 (0是週一) |
tm_yday | 1 到 366(儒略曆) |
tm_isdst | -1, 0, 1, -1是決定是否為夏令時的旗幟 |
解釋 :
time.strftime該函式為時間格式化為字串
%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.sleep(3) #休眠3秒在執行下一行語句
例如 :
for i in range(0, 3):
print(‘hello’)
time.sleep(3)
如上程式碼,將會每3秒輸出一次hello。
1.2datetime
dateime主要為日期和時間相關的庫,例如可以獲取今天是什麼日期,昨天是多少號,對時間進行一些加減操作之類。
例如:
today = datetime.date.today()
print('今天是 : {}'.format(today))
結果 :
今天是 : 2021-01-27
cur_dt = datetime.datetime.now()
str_dt = datetime.datetime.strftime(cur_dt, '%Y-%m-%d %H:%M:%S')
print('現在是(時間物件) : {}'.format(cur_dt))
print('現在是(時間字串) : {}'.format(str_dt))
結果 : datetime轉換為字串格式化和time一樣
現在是(時間物件) : 2021-01-27 17:53:10.221051
現在是(時間字串) : 2021-01-27 17:53:10
str_p = '2019-01-30 10:10:10'
date_p = datetime.datetime.strptime(str_p, '%Y-%m-%d %H:%M:%S')
print('時間字串({})轉成時間物件為:{}'.format(str_p, date_p))
結果 :
時間字串(2019-01-30 10:10:10)轉成時間物件為:2019-01-30 10:10:10
today = datetime.datetime.now()
pre_hour = today + datetime.timedelta(hours=-1)
next_hourt = today + datetime.timedelta(hours=1)
yestoday = today + datetime.timedelta(days=-1)
tomorrow = today + datetime.timedelta(days=1)
print('現在是 : {}'.format(today))
print('現在的前一個小時是 : {}'.format(pre_hour))
print('現在的後一個小時是 : {}'.format(next_hourt))
print('昨天的現在是 : {}'.format(yestoday))
print('明天的現在是 : {}'.format(tomorrow))
結果 :
現在是 : 2021-01-27 18:13:31.771260
現在的前一個小時是 : 2021-01-27 17:13:31.771260
現在的後一個小時是 : 2021-01-27 19:13:31.771260
昨天的現在是 : 2021-01-26 18:13:31.771260
明天的現在是 : 2021-01-28 18:13:31.771260
解釋 :
datetime.timedelta是對時間進行加減操作的,例如填入days則為對天進行加減,填入hours則為時間,還可以為分鐘、秒等引數。
參考程式碼 :
https://github.com/minlixia/python(base_1/07_date.py)
2. 檔案操作
檔案操作是一個很常見的操作,例如對配置檔案的讀寫,資料的儲存等,都會用到檔案操作,這裡會介紹一些對ini檔案的讀寫(ini檔案在專案中比較常用,主要用於來儲存配置檔案)。
檔案相關操作都會用open來開啟一個檔案,返回一個檔案物件,用於後續的檔案讀或者寫,open函式的原型為 :
open(file, mode='r')
file : 檔名
mode : 開啟檔案的格式
模式 | 描述 |
t | 文字模式 (預設)。 |
x | 寫模式,新建一個檔案,如果該檔案已存在則會報錯。 |
b | 二進位制模式。 |
+ | 開啟一個檔案進行更新(可讀可寫)。 |
U | 通用換行模式(不推薦)。 |
r | 以只讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。 |
rb | 以二進位制格式開啟一個檔案用於只讀。檔案指標將會放在檔案的開頭。這是預設模式。一般用於非文字檔案如圖片等。 |
r+ | 開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。 |
rb+ | 以二進位制格式開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。一般用於非文字檔案如圖片等。 |
w | 開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。 |
wb | 以二進位制格式開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。一般用於非文字檔案如圖片等。 |
w+ | 開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。 |
wb+ | 以二進位制格式開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。一般用於非文字檔案如圖片等。 |
a | 開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。 |
ab | 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。 |
a+ | 開啟一個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。 |
ab+ | 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。 |
2.1寫檔案
fp = open('test.txt', 'w')
fp.write('this is python test file\n')
fp.close()
結果 :
在當前目錄下會生成一個test.txt檔案
2.2追加內容
# 在檔案末尾增加內容(檔案不存在則建立)
fp = open('test.txt', 'a')
fp.write('append content\n')
fp.close()
print('建立檔案test.txt並將內容寫入\n')
結果 :
在test.txt檔案的原有內容增加了一行內容
2.3讀檔案
print('讀取test.txt檔案內容')
fp = open('test.txt', 'r')
content = fp.read()
fp.close()
print('read test.txt file:{}'.format(content))
結果 :
讀取test.txt檔案內容
read test.txt file:this is python test file
append content
2.4Ini檔案操作
Ini檔案格式 :
[weixin]
user = test
passwd = 123456
解釋 :
[weixin] : 節點
key1 = val1
key2 = val2
對ini檔案操作,需要引入import ConfigParser庫
寫ini
config = ConfigParser.ConfigParser()
config.add_section('weixin')
config.set('weixin', 'user', 'test')
config.set('weixin', 'passwd', '123456')
config.write(open('user.ini', "w"))
print('寫入user.ini檔案')
結果:
讀ini
config = ConfigParser.ConfigParser()
config.read('user.ini')
username = config.get('weixin', 'user')
passwd = config.get('weixin', 'passwd')
print('user.ini 讀取weixin節點 user:{} passwd:{}'.format(username, passwd))
結果 :
user.ini 讀取weixin節點 user:test passwd:123456
參考程式碼 :
https://github.com/minlixia/python(base_1/08_file.py)
3. 系統操作
系統操作的庫主要為sys和os兩個庫
os模組提供了一種方便的使用作業系統函式的方法,主要位執行作業系統命令,檔案、目錄相關等操作,例如 :
os.system('pwd')
這行程式碼和在linux下直接執行pwd命令結果是一樣的,os.system(cmd)中的cmd引數為作業系統的命令。
檔案、目錄相關操作 :
path = '/tmp'
print('{} is exists :{}'.format(path, os.path.exists(path)))
print('{} is file :{}'.format(path, os.path.isfile(path)))
print('{} is dir :{}'.format(path, os.path.isdir(path)))
結果 :
/tmp is exists :True
/tmp is file :False
/tmp is dir :True
sys模組可供訪問由直譯器使用或維護的變數和與直譯器進行互動的函式,例如常見的外部輸入引數、預設編碼、當前平臺等。
print('當前程序第1個引數:{}'.format(sys.argv[0]))
print('當前執行平臺作業系統 : {}'.format(sys.platform))
結果 :
當前程序第1個引數:09_sys.py
當前執行平臺作業系統 : linux2
設定預設編碼:
import os
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
參考程式碼 :
https://github.com/minlixia/python(base_1/09_sys.py)