python基礎---->經常使用模塊

1、前言:

模塊:用一部分代碼實現了某個功能的代碼集合,相似於函數式編程,定義一個函數完成某個功能呢,其餘代碼用來調用便可,提供了代碼的重用性和代碼間的耦合。而對於一個複雜的功能來,可能須要多個函數才能完成;python

模塊分爲三種:自定義模塊、第三方模塊、內置模塊正則表達式

2、sys模塊

用於提供對Python解釋器相關的操做:算法

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.stdin          輸入相關
8 sys.stdout         輸出相關
9 sys.stderror       錯誤相關

3、os模塊

用於提供系統級別的操做:shell

 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所指向的文件或者目錄的最後修改時間

4、time模塊

經常使用表示時間方式: 時間戳,格式化的時間字符串,元組(struct_time)編程

# struct_time轉換成format_time

%a    本地(locale)簡化星期名稱
%A    本地完整星期名稱
%b    本地簡化月份名稱
%B    本地完整月份名稱
%c    本地相應的日期和時間表示
%d    一個月中的第幾天(01 - 31%H    一天中的第幾個小時(24小時制,00 - 23%I    第幾個小時(12小時制,01 - 12%j    一年中的第幾天(001 - 366%m    月份(01 - 12%M    分鐘數(00 - 59%p    本地am或者pm的相應符    一
%S    秒(01 - 61)    二
%U    一年中的星期數。(00 - 53星期天是一個星期的開始。)第一個星期天以前的全部天數都放在第0周。
%w    一個星期中的第幾天(0 - 6,0是星期天)    三
%W    和%U基本相同,不一樣的是%W以星期一爲一個星期的開始。
%x    本地相應日期
%X    本地相應時間
%y    去掉世紀的年份(00 - 99%Y    完整的年份
%Z    時區的名字(若是不存在爲空字符)
%%    ‘%’字符

實例:結合sys,time模塊實現進度條json

進度百分比
import sys
import time


def view_bar(num, total):
    rate = float(num) / float(total)
    rate_num = int(rate * 100)
    r = '\r%d%%' % (rate_num, )
    sys.stdout.write(r)
    sys.stdout.flush()


if __name__ == '__main__':
    for i in range(0, 100):
        time.sleep(0.1)
        view_bar(i, 100)

5、random模塊

random.random()    # 0~1 隨機浮點數
random.randint(1,100)   #隨機整數1~100
random.randrange(1,7)   #隨機整數,不包括7
random.choice('hello world')   #隨機獲取一個字符
random.choice(['1','2','3',])    #隨機獲取一個元素
random.sample([1,2,3,4,5],3) #random.sample的函數原型爲:random.sample(sequence, k)從指定序列中隨機獲取指定長度的片

實例:生成隨機驗證碼安全

版本一:bash

import random
def check_code():
    check_code = ""
    for i in range(4):
        num = random.randint(0,9)             #隨機選擇0~9
        A1Z1 = chr(random.randint(65,90))     #隨機選擇A~Z
        a1z1 = chr(random.randint(97,122))    #隨機選擇a~z
        add = random.choice([num,A1Z1,a1z1])  #隨機選擇其中一個
        check_code = "".join([code,str(add)])       #拼接一次選到的元素
    return check_code                               #返回驗證碼#
print(check_code())

版本二:服務器

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

5、re模塊

 python中re模塊提供了正則表達式相關操做網絡

1     次數:
2     *     重複零次或更屢次
3     +     重複一次或更屢次
4    ?        重複零次或一次
5     {n}    重複n次
6    {n,}    重複n次或更屢次
7    {n,m}    重複n到m次

其中提供的方法有:

match、search、findall、sub、split

import re
#1
print(re.findall('e','clint love you') )   #['e', 'e'],返回全部知足匹配條件的結果,放在列表裏
#2
print(re.search('e','clint love you').group()) #e,只到找到第一個匹配而後返回一個包含匹配信息的對象,該對象能夠經過調用group()方法獲得匹配的字符串,若是字符串沒有匹配,則返回None。

#3
print(re.match('e','clint love you'))    #None,同search,不過在字符串開始處進行匹配,徹底能夠用search+^代替match

#4
print(re.split('[ab]','abcd'))     #['', '', 'cd'],先按'a'分割獲得''和'bcd',再對''和'bcd'分別按'b'分割

#5
print('===>',re.sub('c','C','clint love you')) #===> Clint love you,不指定n,默認替換全部
print('===>',re.sub('l','L','clint love you',1)) #===> cLint love you
print('===>',re.subn('c','C','clint love you')) #===> ('Alex mAke love', 2),結果帶有總共替換的個數

#6
obj=re.compile('\d{2}')

print(obj.search('abc123eeee').group()) #12
print(obj.findall('abc123eeee')) #['12'],重用了obj

 幾個匹配的實用例子:

# 郵箱表達式
email = r'^[a-aA-Z0-9_-]+@[a-aA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$'
# 例如:
# clint1801@163.com
# 472400995@qq.com
# s180231943@stu.cqupt.edu.cn   企業郵箱
'''
你會發現 後面 \. 這是什麼意思?
 由於  . 表示匹配任意除換行符"\n"外的字符,而咱們要匹配郵箱中的 .  
 因此 須要用到 \   \ 表示轉義字符
 注:

    小括號():匹配小括號內的字符串
    中括號[]:匹配字符組內的字符
    大括號{}:匹配的次數
'''
郵箱 表達式
# 手機號表達式
phone = r'^1[3578]\d{9}$'
手機號 表達式

IP的正則表達式:

這裏講的是IPv4的地址格式,總長度 32位=4段*8位,每段之間用 . 分割, 每段都是0-255之間的十進制數值。

將0-255用正則表達式表示,能夠分紅一下幾塊來分別考慮:

IP地址格式可表示爲:XXX.XXX.XXX.XXX,XXX取值範圍是0-255,前三段加一個.重複了三次,再與最後一段合併 或者 前一段與加 . 重複三次的後三段合併,組成IP地址的完整格式。

# IP地址 正則表達以下:

1、
ip =r'^((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))$'

2、
ip = r'^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$'

6、shutil模塊

高級的 文件、文件夾、壓縮包 處理模塊

shutil.copyfileobj(fsrc, fdst[, length])       將文件內容拷貝到另外一個文件中

import shutil
 
shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))

shutil.copyfile(src, dst)        拷貝文件

shutil.copyfile('f1.log', 'f2.log')

shutil.copymode(src, dst)    僅拷貝權限。內容、組、用戶均不變

shutil.copymode('f1.log', 'f2.log')

shutil.copystat(src, dst)    僅拷貝狀態的信息,包括:mode bits, atime, mtime, flags

shutil.copymode('f1.log', 'f2.log')

shutil.copy(src, dst)    拷貝文件和權限

shutil.copymode('f1.log', 'f2.log')

shutil.copy2(src, dst)    拷貝文件和狀態信息

shutil.copy2('f1.log', 'f2.log')

shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)      遞歸的去拷貝文件夾

shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))

shutil.rmtree(path[, ignore_errors[, onerror]])    遞歸的去刪除文件

shutil.rmtree('folder1')

 shutil.move(src, dst)

遞歸的去移動文件,它相似mv命令,其實就是重命名。

shutil.make_archive(base_name, format,...)

建立壓縮包並返回文件路徑,例如:zip、tar

建立壓縮包並返回文件路徑,例如:zip、tar

# 將 /DjangoProJ/a/test 下的文件打包放置當前程序目錄
import shutil
ret = shutil.make_archive("cc", 'gztar', root_dir='/DjangoProJ/a/test')
  
  
# 將 /DjangoProJ/a/test 下的文件打包放置 /DjangoProJ/a/目錄
import shutil
ret = shutil.make_archive("/DjangoProJ/a/cc", 'gztar', root_dir='/DjangoProJ/a/test ')

7、hashlib模塊

用於加密相關的操做,代替了md5模塊和sha模塊,主要提供 sha1, sha224, sha256, sha384, sha512, blake2b, blake2s和MD5等;

特色:

1.內容相同則hash運算結果相同,內容改變則hash值則改變

2.不可逆推

3.相同算法:不管校驗多長的數據,獲得的哈希值長度固定。

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

8、json和pickle模塊

前言

什麼是序列化?

咱們把對象(變量)從內存中變成可存儲或傳輸的過程稱之爲序列化

爲何要序列化?

持久保存狀態:

  '狀態'會以各類有結構的數據類型形式被保存在內存中;

  內存是沒法永久保存數據的,程序運行了一段時間,斷電或者重啓內存則會清空程序這段段時間保存的數據;

  在斷電或重啓程序以前將程序當前內存中全部的數據都保存下來(保存到文件中),下次程序執行可以從文件中載入以前的數據繼續執行,這就是序列化。

跨平臺數據交互:

  序列化以後,不只能夠把序列化後的內容寫入磁盤,還能夠經過網絡傳輸到別的機器上,若是收發的雙方約定好實用一種序列化的格式,那麼打破了平臺/語言差別化帶來的限制,實現了跨平臺數據交互。

  把變量內容從序列化的對象從新讀到內存裏稱之爲反序列化,即unpickling;

Python中用於序列化的兩個模塊:json(用於【字符串】和 【python基本數據類型】 間進行轉換)、pickle(用於【python特有的類型】 和 【python基本數據類型】間進行轉換)

Json有四個功能:dumps、dump、loads、load

pickle也有四個功能:dumps、dump、loads、load

json使用:

import json
  dic={'name':'clint','age':18,'sex':''}
print(type(dic))    #<class 'dict'>
  j=json.dumps(dic)
print(type(j))      #<class 'str'>

f=open('序列化對象','w')
json.dump(dic,f)
f.close()

序列化和反序列化

import json

# 序列化
info = {'name':'clint','age':'18'}

with open('a','w') as f:
    f.write(json.dumps(info))

# 反序列化
with open('a','r') as f:
    info = json.loads(f.read())
    print(info)

pickle使用:

import pickle
 dic={'name':'clint','age':18,'sex':''}
 print(type(dic))    #<class 'dict'>
 j=pickle.dumps(dic)
 print(type(j))       #<class 'bytes'>

f=open('序列化對象_pickle','wb') #wb是寫入bytes,j是'bytes'
pickle.dump(dic,f)
f.close()


# 反序列化
import pickle
f=open('序列化對象_pickle','rb')
data=pickle.loads(f.read())    # 等data=pickle.load(f)
print(data['age'])

9、configparser模塊

configparser用於生成和修改常見配置文檔,其本質上是利用open來操做文件

一、獲取全部節點

import configparser
 
config = configparser.ConfigParser()
config.read('xxxooo', encoding='utf-8')
ret = config.sections()
print(ret)

二、獲取指定節點全部鍵值對

import configparser
 
config = configparser.ConfigParser()
config.read('xxxooo', encoding='utf-8')
ret = config.items('section1')
print(ret)

三、獲取指定節點下全部鍵

import configparser
 
config = configparser.ConfigParser()
config.read('xxxooo', encoding='utf-8')
ret = config.options('section1')
print(ret)

四、增刪改查節點

import configparser

config = configparser.ConfigParser()
config.read('example.ini',encoding = 'utf-8')

#刪除整個標題
config.remove_section('bitbucket.org')

#刪除標題下的option
config.remove_option('topsecret.server.com','port')

#添加一個標題
config.add_section('info')
#在標題下添加options
config.set('info','name','clint')

#判斷是否存在
print(config.has_section('info'))        #True
print(config.has_option('info','name'))    #True

#將修改的內容存入文件
config.write(open('new_example.ini','w'))

10、paramiko模塊

paramiko是一個用於作遠程控制的模塊,使用該模塊能夠對遠程服務器進行命令或文件操做,fabric和ansible內部的遠程管理就是使用paramiko

下載安裝:

# paramiko 模塊內部依賴pycrypto,因此先下載安裝pycrypto
pip3 install pycrypto
pip3 install paramiko

使用:

# -*- coding:utf-8 -*-
# @Author  : Clint
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.178.1', 8000, 'clint', '123456')
stdin, stdout, stderr = ssh.exec_command('df')
print(stdout.read())
ssh.close()

# 執行命令 - 用戶名+密碼

11、shelve模塊

shelve模塊比pickle模塊簡單,只有一個open函數,返回相似字典的對象,可讀可寫,key必須爲字符串,而值能夠是python所支持的數據類型

import shelve

f=shelve.open(r'sheve.txt')
# f['stu1']={'name':'clint','age':18,'hobby':['basketball','sporting']}
# f['stu2']={'name':'eve','age':18,'hobby':'watching movie'}

print(f['stu1']['hobby'])
f.close()

12、logging模塊

用於便捷記錄日誌且線程安全的模塊,python的logging模塊提供了標準的日誌接口,經過它存儲各類格式的日誌,logging的日誌能夠分爲 debug、info、warning、error、critical5個級別

# -*- coding:utf-8 -*-
# @Author  : Clint
import logging

logging.basicConfig(filename='log.log',
                    format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S %p',
                    level=10)

logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
logging.log(10, 'log')
logg.py
2019-05-18 10:01:23 AM - root - DEBUG -logg:  debug
2019-05-18 10:01:23 AM - root - INFO -logg:  info
2019-05-18 10:01:23 AM - root - WARNING -logg:  warning
2019-05-18 10:01:23 AM - root - ERROR -logg:  error
2019-05-18 10:01:23 AM - root - CRITICAL -logg:  critical
2019-05-18 10:01:23 AM - root - DEBUG -logg:  log
運行結果 logg.log
相關文章
相關標籤/搜索