python經常使用模塊詳解(一)

一.簡介python

  模塊是一個保存了Python代碼的文件。模塊能定義函數,類和變量。模塊裏也能包含可執行的代碼linux

  模塊分爲三種:算法

  • 自定義模塊
  • 內置標準模塊
  • 開源模塊(第三方)

自定義模塊:shell

  

模塊導入windows

import module
from module.xx.xx import xx
from module.xx.xx import xx as rename  
from module.xx.xx import *

導入自定義模塊時注意路徑,查看庫文件sys.path,sys.path.append('路徑')添加自定義路徑數組

二.內置模塊bash

time模塊

 

time模塊提供各類操做時間的函數app

說明:通常有兩種表示時間的方式:
       1.時間戳的方式(相對於1970.1.1 00:00:00以秒計算的偏移量),時間戳是唯一的
       2.以數組的形式表示即(struct_time),共有九個元素,分別表示,同一個時間戳的struct_time會由於時區不一樣而不一樣dom

 
The tuple items are:
year (including century, e.g. 1998)
month (1-12)
day (1-31)
hours (0-23)
minutes (0-59)
seconds (0-59)
weekday (0-6, Monday is 0)
Julian day (day in the year, 1-366)
DST (Daylight Savings Time) flag (-1, 0 or 1)
 
  •  函數
time() -- 返回時間戳
sleep() -- 延遲運行單位爲s
gmtime() -- 轉換時間戳爲時間元組(時間對象)
localtime() -- 轉換時間戳爲本地時間對象
asctime() -- 將時間對象轉換爲字符串
ctime() -- 將時間戳轉換爲字符串
mktime() -- 將本地時間轉換爲時間戳
strftime() -- 將時間對象轉換爲規範性字符串

經常使用的格式代碼:

%Y Year with century as a decimal number.
%m Month as a decimal number [01,12].
%d Day of the month as a decimal number [01,31].
%H Hour (24-hour clock) as a decimal number [00,23].
%M Minute as a decimal number [00,59].
%S Second as a decimal number [00,61].
%z Time zone offset from UTC.
%a Locale's abbreviated weekday name.
%A Locale's full weekday name.
%b Locale's abbreviated month name.
%B Locale's full month name.
%c Locale's appropriate date and time representation.
%I Hour (12-hour clock) as a decimal number [01,12].
%p Locale's equivalent of either AM or PM.
ide


strptime() -- 將時間字符串根據指定的格式化符轉換成數組形式的時間
經常使用格式代碼:
strftime
  • 舉例
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time


#返回當前時間戳
print(time.time())
#返回當前時間
print(time.ctime())
#將時間戳轉換爲字符串
print(time.ctime(time.time()-86640))
#本地時間
print(time.localtime(time.time()-86400))
#與time.localtime()功能相反,將struct_time格式轉回成時間戳格式
print(time.mktime(time.localtime()))
#將struct_time格式轉成指定的字符串格式
print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()))
#將字符串格式轉換成struct_time格式
print(time.strptime("2016-01-28","%Y-%m-%d"))
#休眠5s
time.sleep(5)
View Code

2.datetime模塊

定義的類有: 
datetime.date    --表示日期的類。經常使用的屬性有year, month, day
datetime.time    --表示時間的類。經常使用的屬性有hour, minute, second, microsecond

datetime.datetime  --表示日期時間
datetime.timedelta   --表示時間間隔,即兩個時間點之間的長度

  • date類

date類表示日期,構造函數以下 :

datetime.date(year, month, day);

year (1-9999)

month (1-12)

day (1-31)

date.today()  --返回一個表示當前本地日期的date對象

date.fromtimestamp(timestamp) --根據給定的時間戮,返回一個date對象

 

#根據給定的時間戮,返回一個date對象
print(datetime.date.fromtimestamp(time.time()))
#返回一個表示當前本地日期的date對象
print(datetime.datetime.today())
View Code

 

    date.year()   --取給定時間的年

    date.month()  --取時間對象的月

    date.day()  --取給定時間的日

date.replace()  --生成一個新的日期對象,用參數指定的年,月,日代替原有對象中的屬性

date.timetuple()  --返回日期對應的time.struct_time對象

date.weekday()  --返回weekday,Monday == 0 ... Sunday == 6

date.isoweekday() --返回weekday,Monday == 1 ... Sunday == 7

date.ctime()    --返回給定時間的字符串格式

import datetime
from dateutil.relativedelta import relativedelta
# 獲取當前時間的前一個月
datetime.datetime.now() - relativedelta(months=+1)
# 獲取當天的前一個月
datetime.date.today() - relativedelta(months=+1) 
#取時間對象的年
print(datetime.date.today().year)
#取時間對象的月
print(datetime.date.today().month)
#取時間對象的日
print(datetime.date.today().day)
#生成一個新的日期對象,用參數指定的年,月,日代替原有對象中的屬性
print(datetime.date.today().replace(2010,6,12))
#返回給定時間的時間元組/對象
print(datetime.date.today().timetuple())
#返回weekday,從0開始
print(datetime.date.today().weekday())
#返回weekday,從1開始
print(datetime.date.today().isoweekday())
#返回給定時間的字符串格式
print(datetime.date.today().ctime())
View Code
  • time 類

time類表示時間,由時、分、秒以及微秒組成

time.min()  --最小表示時間

time.max()  --最大表示時間

time.resolution()  --微秒

 

#最大時間
print(datetime.time.max)
#最小時間
print(datetime.time.min)
#時間最小單位,微秒
print(datetime.time.resolution)
View Code

 

  • datetime類

datetime是date與time的結合體,包括date與time的全部信息

datetime.max()  --最大值

datetime.min()  --最小值

datetime.resolution() --datetime最小單位

datetime.today()  --返回一個表示當前本地時間

datetime.fromtimestamp()  --根據給定的時間戮,返回一個datetime對象

datetime.year()  --取年

datetime.month()  --取月

datetime.day()  --取日期

datetime.replace()  --替換時間

datetime.strptime()  --將字符串轉換成日期格式

datetime.time()  --取給定日期時間的時間  

#datetime最大值
print(datetime.datetime.max)
#datetime最小值
print(datetime.datetime.min)
#datetime最小單位
print(datetime.datetime.resolution)
#返回一個表示當前本地時間
print(datetime.datetime.today())
#根據給定的時間戮,返回一個datetime對象
print(datetime.datetime.fromtimestamp(time.time()))
#取時間對象的年
print(datetime.datetime.now().year)
#取時間對象的月
print(datetime.datetime.now().month)
#取時間對象的日
print(datetime.datetime.now().day)
#生成一個新的日期對象,用參數指定的年,月,日代替原有對象中的屬性
print(datetime.datetime.now().replace(2010,6,12))
#返回給定時間的時間元組/對象
print(datetime.datetime.now().timetuple())
#返回weekday,從0開始
print(datetime.datetime.now().weekday())
#返回weekday,從1開始
print(datetime.datetime.now().isoweekday())
#返回給定時間的字符串格式
print(datetime.datetime.now().ctime())
#將字符串轉換成日期格式
print(datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M"))
#取給定日期時間的時間
print(datetime.datetime.now().time())
#獲取5日前時間
print(datetime.datetime.now() + datetime.timedelta(days=-5))
View Code

 

3.sys模塊

   用於提供對解釋器相關的訪問及維護,並有很強的交互功能

經常使用函數:

sys.argv --傳參,第一個參數爲腳本名稱即argv[0]

sys.path --模塊搜索路徑

sys.moudule --加載模塊字典

sys.stdin  --標準輸入

sys.stdout  --標準輸出

sys.stderr  --錯誤輸出

sys.platform --返回系統平臺名稱

sys.version  --查看python版本

sys.maxsize  --最大的Int值

舉例:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#傳參
import sys

print(sys.argv[0])
print(sys.argv[1])
print(sys.argv[2])


##運行
python argv.py argv0 argv1
argv.py
argv0
argv1

 

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys,os

dirname = sys.stdin.read()
os.mkdir(dirname.strip())
View Code
#sys.exit()系統返回值 

>>> import sys
>>> sys.exit(0)

C:\>echo %ERRORLEVEL%
0

#windows查看系統返回值命令
echo %ERRORLEVEL%
#linux查看系統返回值命令
echo $?
>>> import sys
>>> sys.platform
'win32'
>>> sys.version
'3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)]'

>>> sys.maxsize
9223372036854775807
View Code
import sys,time
for i in range(100):
    sys.stdout.write('r')
    sys.stdout.write('%s%% |%s' % (int(i/100*100),int(i/100*100) * '*'))
    sys.stdout.flush
    time.sleep(0.2)
View Code

4.pickle模塊

  pickle,用於python特有的類型 和 python的數據類型間進行轉換

 pickle模塊提供了四個功能:dumps、dump、loads、load

Functions:

dump(object, file)
dumps(object) -> string
load(file) -> object
loads(string) -> object

pickle.dumps(obj)--把任意對象序列化成一個str,而後,把這個str寫入文件
pickle.loads(string)  --反序列化出對象
pickle.dump(obj,file)  --直接把對象序列化後寫入文件
pickle.load(file)
  --從文件中反序列化出對象
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pickle
accounts = {
    1000: {
        'name':'USERA',
        'email': 'lijie3721@126.com',
        'passwd': 'abc123',
        'balance': 15000,
        'phone': 13651054608,
        'bank_acc':{
            'ICBC':14324234,
            'CBC' : 235234,
            'ABC' : 35235423
        }
    },
    1001: {
        'name': 'USERB',
        'email': 'caixin@126.com',
        'passwd': 'abc145323',
        'balance': -15000,
        'phone': 1345635345,
        'bank_acc': {
            'ICBC': 4334343,
        }
    },
}
#把字典類型寫入到文件中
f = open('accounts.db','wb')
f.write(pickle.dumps(accounts))
f.close()

#2,反序列出對象並修改其內容,並將修改內容從新寫入文件
file_name = "accounts.db"
f = open(file_name,'rb')
account_dic = pickle.loads(f.read())
f.close()

account_dic[1000]['balance'] -= 500
f = open(file_name,'wb')
f.write(pickle.dumps(account_dic))
f.close()


#3,反序列化對象並查看其內容

f = open('accounts.db','rb')
acountdb = pickle.loads(f.read())
print(acountdb)
dic = {
    'k1': [1,2],
    'k2': [3,4]
}
#1.將對象寫入文件
f = open('test','wb')
pickle.dump(dic,f)
f.close()
#2.將文件中內容反序列化,並讀出
f = open('test','rb')
dic2 = pickle.load(f)
print(dic2)
f.close()

 

5.os模塊

做用:

  用於提供系統級別的操做

函數: 

 1 os.getcwd()                 獲取當前工做目錄,即當前python腳本工做的目錄路徑
 2 os.chdir("dirname") 改變當前腳本工做目錄;至關於shell下cd 3 os.curdir 返回當前目錄: ('.') 4 os.pardir 獲取當前目錄的父目錄字符串名:('..') 5 os.makedirs('dir1/dir2') 可生成多層遞歸目錄 6 os.removedirs('dirname1') 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推 7 os.mkdir('dirname') 生成單級目錄;至關於shell中mkdir dirname 8 os.rmdir('dirname') 刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname 9 os.listdir('dirname') 列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印 10 os.remove() 刪除一個文件 11 os.rename("oldname","new") 重命名文件/目錄 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.basename(path) 返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素 23 os.path.exists(path) 若是path存在,返回True;若是path不存在,返回False 24 os.path.isabs(path) 若是path是絕對路徑,返回True 25 os.path.isfile(path) 若是path是一個存在的文件,返回True。不然返回False 26 os.path.isdir(path) 若是path是一個存在的目錄,則返回True。不然返回False 27 os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略 28 os.path.getatime(path) 返回path所指向的文件或者目錄的最後存取時間 29 os.path.getmtime(path) 返回path所指向的文件或者目錄的最後修改時間

6.hashlib模塊

  做用:

  用於加密相關的操做,代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 

import hashlib
 
# ######## md5 ########
hash = hashlib.md5()
# help(hash.update)
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
print(hash.digest())
 
 
######## sha1 ########
 
hash = hashlib.sha1()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
 
# ######## sha256 ########
 
hash = hashlib.sha256()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
 
 
# ######## sha384 ########
 
hash = hashlib.sha384()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
 
# ######## sha512 ########
 
hash = hashlib.sha512()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
View Code

  加密算法缺陷,即:經過撞庫能夠反解。因此,有必要對加密算法中添加自定義key再來作加密

import hashlib
 
# ######## md5 ########
 
hash = hashlib.md5(bytes('898oaFs09f',encoding="utf-8"))
hash.update(bytes('admin',encoding="utf-8"))
print(hash.hexdigest())
View Code

  7.random

  做用:

  生成隨機變量

import random
 
print(random.random()) print(random.randint(1, 2)) print(random.randrange(1, 10))
import random
checkcode = ''
for i in range(4):
    current = random.randrange(0,4)
    if current != i:
        temp = chr(random.randint(65,90))
    else:
        temp = random.randint(0,9)
    checkcode += str(temp)
print checkcode
相關文章
相關標籤/搜索