Python經常使用模塊(time, datetime, random, os, sys, hashlib)

time模塊python

在Python中,一般有這幾種方式來表示時間:算法

  • 時間戳(timestamp) :         一般來講,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。咱們運行「type(time.time())」,返回的是float類型。
  • 格式化的時間字符串
  • 元組(struct_time)   :         struct_time元組共有9個元素共九個元素:(年,月,日,時,分,秒,一年中第幾周,一年中第幾天,夏令時)
 1 import time
 2  
 3 # 1 time() :返回當前時間的時間戳
 4 time.time()  #1473835903.0278263
 5  
 6 #----------------------------------------------------------
 7  
 8 # 2 localtime([secs])
 9 # 將一個時間戳轉換爲當前時區的struct_time。secs參數未提供,則以當前時間爲準。
10 time.localtime()  # time.struct_time(tm_year=2016, tm_mon=9, tm_mday=14, tm_hour=14, tm_min=53, tm_sec=18, tm_wday=2, tm_yday=258, tm_isdst=0)
11 time.localtime(1473835903.0278263)
12  
13 #----------------------------------------------------------
14  
15 # 3 gmtime([secs]) 和localtime()方法相似,gmtime()方法是將一個時間戳轉換爲UTC時區(0時區)的struct_time。
16  
17 #----------------------------------------------------------
18  
19 # 4 mktime(t) : 將一個struct_time轉化爲時間戳。
20 print(time.mktime(time.localtime()))#1473836098.0
21  
22 #----------------------------------------------------------
23  
24 # 5 asctime([t]) : 把一個表示時間的元組或者struct_time表示爲這種形式:'Sun Jun 20 23:21:05 1993'。
25 # 若是沒有參數,將會將time.localtime()做爲參數傳入。
26 print(time.asctime())#Wed Sep 14 14:55:39 2016
27  
28 #----------------------------------------------------------
29  
30 # 6 ctime([secs]) : 把一個時間戳(按秒計算的浮點數)轉化爲time.asctime()的形式。若是參數未給或者爲
31 # None的時候,將會默認time.time()爲參數。它的做用至關於time.asctime(time.localtime(secs))。
32 print(time.ctime())  #Wed Sep 14 14:55:39 2016
33  
34 print(time.ctime(time.time()))  # Wed Sep 14 14:55:39 2016
35  
36 # 7 strftime(format[, t]) : 把一個表明時間的元組或者struct_time(如由time.localtime()和
37 # time.gmtime()返回)轉化爲格式化的時間字符串。若是t未指定,將傳入time.localtime()。若是元組中任何一個
38 # 元素越界,ValueError的錯誤將會被拋出。
39 print(time.strftime("%Y-%m-%d %X", time.localtime()))  # 2016-09-14 14:58:12
40  
41 # 8 time.strptime(string[, format])
42 # 把一個格式化時間字符串轉化爲struct_time。實際上它和strftime()是逆操做。
43 print(time.strptime('2016-09-14 14:58:12', '%Y-%m-%d %X'))
44  
45 # time.struct_time(tm_year=2016, tm_mon=9, tm_mday=14, tm_hour=14, tm_min=58, tm_sec=12, tm_wday=2, tm_yday=258, tm_isdst=-1)
46  
47 #在這個函數中,format默認爲:"%a %b %d %H:%M:%S %Y"。
48  
49  
50 # 9 sleep(secs)
51 # 線程推遲指定的時間運行,單位爲秒。
52  
53 # 10 clock()
54 # 這個須要注意,在不一樣的系統上含義不一樣。在UNIX系統上,它返回的是「進程時間」,它是用秒錶示的浮點數(時間戳)。
55 # 而在WINDOWS中,第一次調用,返回的是進程運行的實際時間。而第二次以後的調用是自第一次調用之後到如今的運行
56 # 時間,即兩次時間差。
time模塊

 幫助信息shell

help(time)
help(time.asctime)

datetime模塊數據庫

import datetime


# print(datetime.datetime.now()) #返回 2016-09-14 15:09:09.555727
 # print(datetime.date.fromtimestamp(time.time()) )  # 時間戳直接轉成日期格式 2016-09-14
# 時間加減
# 對日期和時間進行加減實際上就是把datetime日後或往前計算,獲得新的datetime。

# now = datetime.datetime.now()
# now + datetime.timedelta(3)) #當前時間+3天
# now + datetime.timedelta(-3)) #當前時間-3天
# now+ datetime.timedelta(hours=3)) #當前時間+3小時
# now + datetime.timedelta(minutes=30)) #當前時間+30分

# c_time  = datetime.datetime.now()
# print(c_time.replace(minute=3,hour=2)) #時間替換

random 模塊bash

 1 import random
 2 
 3 print(random.random())        # (0,1)隨機浮點數
 4 print(random.randint(1, 3))   # 隨機1-3整數,便是一、二、3
 5 print(random.randrange(1, 3))  # 隨機1-3整數,不包括3
 6 print(random.choice([1, "23", [4, 5]]))  # n個元素中選一個
 7 print(random.sample(['123', 4, [1, 6], 9], 3))  # 從n個元素中選擇指定個數,這裏是3
 8 print(random.uniform(1, 5))    # 生成隨機浮點數
 9 
10 
11 # 生成隨機驗證碼 
12 def v_code():
13     code=''
14     for i in range(5):
15         add = random.choice([random.randrange(10),chr(random.randrange(65,91))])
16         code += str(add)
17 
18     print(code)
19 v_code()

os 模塊app

os是與操做系統交互的一個接口運維

 1 os.getcwd() 獲取當前工做目錄,即當前python腳本工做的目錄路徑
 2 os.chdir("dirname")  改變當前腳本工做目錄;至關於shell下cd
 3 os.curdir  返回當前目錄: ('.')
 4 os.pardir  獲取當前目錄的父目錄字符串名:('..')
 5 os.mkdir('dirname')    生成單級目錄;至關於shell中mkdir dirname
 6 os.rmdir('dirname')    刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname
 7 os.makedirs('dirname1/dirname2')    可生成多層遞歸目錄
 8 os.listdir('dirname')    列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打
 9 os.remove()  刪除一個文件
10 os.removedirs('dirname1')    若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推
11 os.rename("oldname","newname")  重命名文件/目錄  # abc.txt與abc是兩個文件
12 os.stat('path/filename')  獲取文件/目錄信息
13 os.sep    輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/"
14 os.linesep    輸出當前平臺使用的行終止符,win下爲"\t\n",Linux下爲"\n"
15 os.pathsep    輸出用於分割文件路徑的字符串
16 os.name    輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'
17 os.system("bash command")  運行shell命令,直接顯示
18 os.environ  獲取系統環境變量
19 os.path.abspath(path)  返回path規範化的絕對路徑
20 os.path.split(path)  將path分割成目錄和文件名二元組返回
21 os.path.dirname(path)  返回path的目錄。其實就是os.path.split(path)的第一個元素
22 os.path.join(path1[, path2[, ...]])  將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略
os 模塊

sys模塊dom

 

提供對解釋器相關的操做ide

1 sys.argv           命令行參數List,第一個元素是程序自己路徑
2 sys.exit(n)        退出程序,正常退出時exit(0)
3 sys.version        獲取Python解釋程序的版本信息
4 sys.maxint         最大的Int值
5 sys.path           返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
6 sys.platform       返回操做系統平臺名稱
7 sys.stdout.write('please:')
8 val = sys.stdin.readline()[:-1]
9 sys.path.append() 改變模塊的搜索目錄

hashlib 模塊函數

Python的hashlib提供了常見的摘要算法,如MD5,SHA1等等。

什麼是摘要算法呢?摘要算法又稱哈希算法、散列算法。它經過一個函數,把任意長度的數據轉換爲一個長度固定的數據串(一般用16進制的字符串表示)。

摘要算法就是經過摘要函數f()對任意長度的數據data計算出固定長度的摘要digest,目的是爲了發現原始數據是否被人篡改過。

摘要算法之因此能指出數據是否被篡改過,就是由於摘要函數是一個單向函數,計算f(data)很容易,但經過digest反推data卻很是困難。並且,對原始數據作一個bit的修改,都會致使計算出的摘要徹底不一樣。

咱們以常見的摘要算法MD5爲例,計算出一個字符串的MD5值:

1 import hashlib
2 
3 md5 = hashlib.md5()
4 md5.update('how to use md5 in python hashlib?'.encode('utf-8'))
5 print(md5.hexdigest())

計算結果以下:

d26a53750bc40b38b65a520292f69306

若是數據量很大,能夠分塊屢次調用update(),最後計算的結果是同樣的:

import hashlib

md5 = hashlib.md5()
md5.update('how to use md5 in '.encode('utf-8'))
md5.update('python hashlib?'.encode('utf-8'))
print(md5.hexdigest())

另外一種常見的摘要算法是SHA1,調用SHA1和調用MD5徹底相似:

1 import hashlib
2 
3 sha1 = hashlib.sha1()
4 sha1.update('how to use sha1 in '.encode('utf-8'))
5 sha1.update('python hashlib?'.encode('utf-8'))
6 print(sha1.hexdigest())

摘要算法能應用到什麼地方?舉個經常使用例子:

任何容許用戶登陸的網站都會存儲用戶登陸的用戶名和口令。如何存儲用戶名和口令呢?方法是存到數據庫表中

若是以明文保存用戶口令,若是數據庫泄露,全部用戶的口令就落入黑客的手裏。此外,網站運維人員是能夠訪問數據庫的,也就是能獲取到全部用戶的口令。

正確的保存口令的方式是不存儲用戶的明文口令,而是存儲用戶口令的摘要

相關文章
相關標籤/搜索