當前位置 博文首頁 > 信息技術智庫:? C站最全Python庫總結丨標準庫+高級庫(萬字長文

    信息技術智庫:? C站最全Python庫總結丨標準庫+高級庫(萬字長文

    作者:[db:作者] 時間:2021-09-13 19:05

    夢想還是要有的,萬一別人問呢?

    作者:不吃西紅柿

    簡介:CSDN博客專家、藍橋簽約作者、大數據&Python領域優質創作者。

    CSDN私信我,回復【資料】領取:

    1、100套小編購買的簡歷模板;
    2、1000套精品PPT模板;
    3、Python 基礎和實戰應用;
    4、Java基礎、高級和面試資料;
    5、大數據-行業資料(行業峰會、技術風向);
    6、大數據-學習資料(300+ PDF);
    7、數據倉庫理論知識和項目實戰;
    8、機器學習&推薦系統。


    文章如果能擊中你,求點贊、求收藏、求評論

    上一篇,《C站最全Python標準庫總結》,登頂了【全站綜合熱榜】和【python領域熱榜】,獲得了2362多次點贊、998次評論、2072次收藏,謝謝各位小伙伴。

    有粉絲留言說,還想看常用高級庫,為了寵粉和圈粉,西紅柿就再補充一下Python高級庫的使用技巧。希望你能喜歡喲~


    python標準庫思維導圖:


    python常用高級庫思維導圖:


    一、python常用高級庫


    1、操作數據庫:MySQLdb

    安裝MySQLdb,請訪問 http://sourceforge.net/projects/mysql-python?

    import MySQLdb
    ?
    # 連接數據庫 
    conn = MySQLdb.connect(host='localhost',user='root',passwd='xxxx',db='test1')

    ?
    # 獲取cursor對象來進行操作
    cursor = conn.cursor()

    # 從你的全世界錯過~
    sql = "select * from world where someone like 'you' "


    # 執行sql
    cursor.execute(sql)

    2、Web 開發:?flask

    把客戶端所有的請求都轉發給這個程序實例
    from flask import Flask
    import datetime
    
    server=Flask(__name__)
    
    @server.route('/time',methods=['post','get'])
    def get_time():
        now=str(datetime.datetime.now())#把當前時間轉換成字符串
        return "當前的時間是:%s"%now
    
    
    server.run(port=8888)

    3、網絡爬蟲:requests

    Requests 允許你發送純天然的 HTTP/1.1 請求,無需手工勞動。你不需要手動為 URL 添加查詢字串,也不需要對 POST 數據進行表單編碼。Keep-alive 和 HTTP 連接池的功能是 100% 自動化的。

    一個簡單的爬蟲樣例:

    import requests
    heads = {}
    heads['User-Agent'] = 'Mozilla/5.0 ' \
                              '(Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 ' \
                              '(KHTML, like Gecko) Version/5.1 Safari/534.50'
    
    response = requests.get('http://www.baidu.com',headers=headers)

    4、操作execl:pandas

    # -*- coding: utf-8 -*-
    import xlrdimport xlwt
    from datetime import date,datetime
    
    def read_excel():
        # 打開文件
        workbook = xlrd.open_workbook(r'F:\demo.xlsx')
        # 獲取所有sheet
        print workbook.sheet_names() # [u'sheet1', u'sheet2']
        sheet2_name = workbook.sheet_names()[1]
    
        # 根據sheet索引或者名稱獲取sheet內容
        sheet2 = workbook.sheet_by_index(1) # sheet索引從0開始
        sheet2 = workbook.sheet_by_name('sheet2')
    
        # sheet的名稱,行數,列數
        print sheet2.name,sheet2.nrows,sheet2.ncols
    
        # 獲取整行和整列的值(數組)
        rows = sheet2.row_values(3) # 獲取第四行內容
        cols = sheet2.col_values(2) # 獲取第三列內容
        print rows
        print cols
    
        # 獲取單元格內容
        print sheet2.cell(1,0).value.encode('utf-8')
        print sheet2.cell_value(1,0).encode('utf-8')
        print sheet2.row(1)[0].value.encode('utf-8')
        
        # 獲取單元格內容的數據類型
        print sheet2.cell(1,0).ctype
    
    if __name__ == '__main__':
        read_excel()

    5、數據分析:numpy

    NumPy 包含大量的各種數學運算的函數,包括三角函數,算術運算的函數,復數處理函數等。

    NumPy 提供了多種排序的方法。 這些排序函數實現不同的排序算法,每個排序算法的特征在于執行速度,最壞情況性能,所需的工作空間和算法的穩定性。 下表顯示了三種排序算法的比較。

    三角函數

    NumPy 提供了標準的三角函數:sin()、cos()、tan()。

    import numpy as np
     
    a = np.array([0,30,45,60,90])
    print ('不同角度的正弦值:')
    # 通過乘 pi/180 轉化為弧度  
    print (np.sin(a*np.pi/180))
    print ('\n')
    print ('數組中角度的余弦值:')
    print (np.cos(a*np.pi/180))
    print ('\n')
    print ('數組中角度的正切值:')
    print (np.tan(a*np.pi/180))

    6、數據畫圖分析:Matplotlib

    import numpy as np 
    from matplotlib import pyplot as plt 
     
    x = np.arange(1,11) 
    y =  2  * x +  5 
    plt.title("Matplotlib demo") 
    plt.xlabel("x axis caption") 
    plt.ylabel("y axis caption") 
    plt.plot(x,y) 
    plt.show()

    以上實例中,np.arange() 函數創建 x 軸上的值。y 軸上的對應值存儲在另一個數組對象 y 中。 這些值使用 matplotlib 軟件包的 pyplot 子模塊的 plot() 函數繪制。

    圖形由 show() 函數顯示。

    7、科學計算:scipy

    ??scipy.special庫中的特殊函數都是超越函數,所謂超越函數是指變量之間的關系不能用有限次加、減、乘、除、乘方、開方 運算表示的函數。如初等函數中的三角函數、反三角函數與對數函數、指數函數都是初等超越函數,一般來說非初等函數都是超越函數。

    初等函數:指由基本初等函數經過有限次四則運算與復合運算所得到的函數

    8、視覺及圖像處理:PIL(pillow)

    創建縮略圖

    import os
    from PIL import Image
    
    image_path = 'python-logo.png'  # 圖片位置
    size = (128, 128)  # 文件大小
    f, e = os.path.splitext(image_path)  # 獲取文件名與后綴
    outfile = f + ".thumbnail"
    if image_path != outfile:
        try:
            im = Image.open(image_path)
            im.thumbnail(size)  # 設置縮略圖大小
            im.save(outfile, "JPEG")
        except IOError:
            print("cannot convert", image_path)

    創建滾動圖形

    python學得好,PS也能干!

    from PIL import Image
    
    
    def roll(image, delta):
        """ 向側面滾動圖像 """
        xsize, ysize = image.size
    
        delta = delta % xsize
        if delta == 0: return image
    
        part1 = image.crop((0, 0, delta, ysize))
        part2 = image.crop((delta, 0, xsize, ysize))
        image.paste(part1, (xsize - delta, 0, xsize, ysize))
        image.paste(part2, (0, 0, xsize - delta, ysize))
    
        return image
    
    
    if __name__ == '__main__':
        image_path = 'test.jpg'
        im = Image.open(image_path)
        roll(im, 300).show()  # 向側面滾動 300 像素


    9、圖形界面開發:?PyQT

    俄羅斯方塊游戲是有史以來最受歡迎的電腦游戲。

    最初的游戲是由俄羅斯設計和編程的程序員阿列克謝帕基特諾夫于1985年。此后,俄羅斯方塊是幾乎所有的計算機平臺上可用在很多變化。
    俄羅斯方塊稱為積木拼圖游戲。在這個游戲中,我們有七種不同形狀叫tetrominoes:“s”形,Z-shape,t形,一個l型的空間,一個線,MirroredL-shape和正方形。這些形狀的形成有四個方格。形狀是跌倒。俄羅斯方塊游戲的對象是移動和旋轉的形狀使他們適合盡可能多。

    如果我們設法形成一個行,該行摧毀我們得分。我們直到我們玩俄羅斯方塊游戲。

    tetrominoes

    PyQt5是一種用于創建應用程序的工具。還有其他的庫是針對創建電腦游戲。

    然而,PyQt5和其他應用程序工具包可以用來創建簡單的游戲。
    創建一個電腦游戲是一個提高編程技能的很好的方發。


    10、游戲開發:pygame

    • Pygame是一組跨平臺的Python模塊, 用于創建視頻游戲。
    • 它由旨在與Python編程語言一起使用的計算機圖形和聲音庫組成。
    • Pygame由Pete Shinners正式編寫, 以取代PySDL。
    • Pygame適合于創建客戶端應用程序, 這些應用程序可以包裝在獨立的可執行文件中。
    import pygame
    
    pygame.init()
    screen = pygame.display.set_mode((400, 500))
    done = False
    
    while not done:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True
        pygame.display.flip()

    。。。。。。。。。。。。分隔符。。。。。。。

    二、python常用標準庫

    1、操作系統接口

    os模塊提供了不少與操作系統相關聯的函數。

    >>> import os
    >>> os.getcwd()      # 返回當前的工作目錄
    'C:\\Python34'
    >>> os.chdir('/server/accesslogs')   # 修改當前的工作目錄
    >>> os.system('mkdir today')   # 執行系統命令 mkdir 
    0

    建議使用 "import os" 風格而非 "from os import *"。這樣可以保證隨操作系統不同而有所變化的 os.open() 不會覆蓋內置函數 open()。

    os常用命令

    序號方法功能
    1os.access(path, mode)??檢驗權限模式
    2os.chdir(path)? ?改變當前工作目錄
    3os.chflags(path, flags)??設置路徑的標記為數字標記。
    4os.chmod(path, mode)? ??更改權限
    5os.chown(path, uid, gid)??更改文件所有者
    6os.chroot(path)? ?改變當前進程的根目錄
    7os.close(fd)? ??關閉文件描述符 fd
    8os.closerange(fd_low, fd_high)? ??關閉所有文件描述符,從 fd_low (包含) 到 fd_high (不包含), 錯誤會忽略
    9os.dup(fd)? ??復制文件描述符 fd
    10os.dup2(fd, fd2)? ??將一個文件描述符 fd 復制到另一個 fd2


    2、文件通配符

    glob模塊提供了一個函數用于從目錄通配符搜索中生成文件列表:

    >>> import glob
    >>> glob.glob('*.py')
    ['primes.py', 'random.py', 'quote.py']

    3、命令行參數

    通用工具腳本經常調用命令行參數。這些命令行參數以鏈表形式存儲于 sys 模塊的 argv 變量。

    sys.argv
    可以用sys.argv獲取當前正在執行的命令行參數的參數列表(list)。
    變量解釋

    • sys.argv[0]當前程序名
    • sys.argv[1]第一個參數
    • sys.argv[2]第二個參數

    len(sys.argv)-1 參數個數(減去文件名)

    例如在命令行中執行 "python demo.py one two three" 后可以得到以下輸出結果:

    >>> import sys
    >>> print(sys.argv)
    ['demo.py', 'one', 'two', 'three']

    4、字符串正則匹配

    re模塊為高級字符串處理提供了正則表達式工具?梢哉f是爬蟲必備,對于復雜的匹配和處理,正則表達式提供了簡潔、優化的解決方案:如果只需要簡單的功能,應該首先考慮字符串方法,因為它們非常簡單,易于閱讀和調試:

    >>> 'tea for too'.replace('too', 'two')
    'tea for two'

    re.match函數

    re.match 嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。

    函數語法

    re.match(pattern, string, flags=0)

    函數參數說明:

    參數描述
    pattern匹配的正則表達式
    string要匹配的字符串。
    flags標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。

    匹配成功re.match方法返回一個匹配的對象,否則返回None。

    我們可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。

    匹配對象方法描述
    group(num=0)匹配的整個表達式的字符串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組。
    groups()返回一個包含所有小組字符串的元組,從 1 到 所含的小組號。

    5、數學計算

    math模塊為浮點運算提供了對底層C函數庫的訪問:

    >>> import math
    >>> math.cos(math.pi / 4)
    0.70710678118654757
    >>> math.log(1024, 2)
    10.0

    在實際工作中,math標準庫往往無法滿足需求,我還需要擴展庫:NumPy

    NumPy(Numerical Python) 支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。

    • NumPy 官網?http://www.numpy.org/

    6、發送郵件

    有幾個模塊用于訪問互聯網以及處理網絡通信協議。其中最簡單的兩個是用于處理從 urls 接收的數據的 urllib.request 以及用于發送電子郵件的 smtplib:

    import smtplib
    smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

    參數說明

    • host: SMTP 服務器主機。 你可以指定主機的ip地址或者域名如: runoob.com,這個是可選參數。
    • port: 如果你提供了 host 參數, 你需要指定 SMTP 服務使用的端口號,一般情況下 SMTP 端口號為25。
    • local_hostname: 如果 SMTP 在你的本機上,你只需要指定服務器地址為 localhost 即可。

    Python SMTP 對象使用 sendmail 方法發送郵件,語法如下:

    SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])

    參數說明

    • from_addr: 郵件發送者地址。
    • to_addrs: 字符串列表,郵件發送地址。
    • msg: 發送消息

    案例:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    ?
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    ?
    sender = 'from@runoob.com'
    receivers = ['429240967@qq.com'] ?# 接收郵件,可設置為你的QQ郵箱或者其他郵箱
    ?
    # 三個參數:第一個為文本內容,第二個 plain 設置文本格式,第三個 utf-8 設置編碼
    message = MIMEText('Python 郵件發送測試...', 'plain', 'utf-8')
    message['From'] = Header("菜鳥教程", 'utf-8') ? # 發送者
    message['To'] = ?Header("測試", 'utf-8') ? ? ? ?# 接收者
    ?
    subject = 'Python SMTP 郵件測試'
    message['Subject'] = Header(subject, 'utf-8')
    ?
    ?
    try:
    ? ? smtpObj = smtplib.SMTP('localhost')
    ? ? smtpObj.sendmail(sender, receivers, message.as_string())
    ? ? print "郵件發送成功"
    except smtplib.SMTPException:
    ? ? print "Error: 無法發送郵件"

    7、日期和時間

    datetime模塊為日期和時間處理同時提供了簡單和復雜的方法。

    支持日期和時間算法的同時,實現的重點放在更有效的處理和格式化輸出。

    該模塊還支持時區處理:

    >>> # dates are easily constructed and formatted
    >>> from datetime import date
    >>> now = date.today()
    >>> now
    datetime.date(2003, 12, 2)
    >>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
    '12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'
    

    時間的三種存在方式:時間對象,時間字符串,時間戳。

    (1)字符串轉datetime:

    >>> string = '2014-01-08 11:59:58'
    >>> time1 = datetime.datetime.strptime(string,'%Y-%m-%d %H:%M:%S')
    >>> print time1
    2014-01-08 11:59:58

    (2)datetime轉字符串:

    >>> time1_str = datetime.datetime.strftime(time1,'%Y-%m-%d %H:%M:%S')
    >>> time1_str
    '2014-01-08 11:59:58'

    (3)時間戳轉時間對象:

    >>>time1 = time.localtime()
    >>>time1_str = datetime.datetime.fromtimestamp(time1)

    8、數據壓縮

    以下模塊直接支持通用的數據打包和壓縮格式:zlib,gzip,bz2,zipfile,以及 tarfile。

    >>> import zlib
    >>> s = b'witch which has which witches wrist watch'
    >>> len(s)
    41
    >>> t = zlib.compress(s)
    >>> len(t)
    37
    >>> zlib.decompress(t)
    b'witch which has which witches wrist watch'
    >>> zlib.crc32(s)
    226805979

    9、性能度量

    有些用戶對了解解決同一問題的不同方法之間的性能差異很感興趣。Python 提供了一個度量工具,為這些問題提供了直接答案。

    例如,使用元組封裝和拆封來交換元素看起來要比使用傳統的方法要誘人的多,timeit 證明了現代的方法更快一些。

    >>> from timeit import Timer
    >>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
    0.57535828626024577
    >>> Timer('a,b = b,a', 'a=1; b=2').timeit()
    0.54962537085770791

    相對于 timeit 的細粒度,:mod:profile 和 pstats 模塊提供了針對更大代碼塊的時間度量工具。


    10、測試模塊

    開發高質量軟件的方法之一是為每一個函數開發測試代碼,并且在開發過程中經常進行測試

    doctest模塊提供了一個工具,掃描模塊并根據程序中內嵌的文檔字符串執行測試。

    測試構造如同簡單的將它的輸出結果剪切并粘貼到文檔字符串中。

    通過用戶提供的例子,它強化了文檔,允許 doctest 模塊確認代碼的結果是否與文檔一致:

    def average(values):
        """Computes the arithmetic mean of a list of numbers.
    
        >>> print(average([20, 30, 70]))
        40.0
        """
        return sum(values) / len(values)
    
    import doctest
    doctest.testmod()   # 自動驗證嵌入測試

    ?

    【求評論、求點贊、求收藏】?


    cs
程序員cxuan的個人主頁:這篇 Java 基礎,我吹不動了 小小張自由―>張有博:軟件工程――編碼、測試、維護 小小張自由―>張有博:淺談面向對象方法學 小小張自由―>張有博:UML――概述(事物、關系、圖) 小小張自由―>張有博:UML――用例圖 小小張自由―>張有博:UML――活動圖和狀態圖 小小張自由―>張有博:UML――交互圖(順序圖與協作圖) 小小張自由―>張有博:UML――實現圖(構件圖與部署圖) 小小張自由―>張有博:C#編程基礎――C#與.NET的關系 小小張自由―>張有博:C#編程基礎――數據類型 小小張自由―>張有博:C#編程基礎――常量與變量 小小張自由―>張有博:C#編程基礎――運算符與表達式 小小張自由―>張有博:C#編程基礎――循環語句 小小張自由―>張有博:C#編程基礎――跳轉語句 小小張自由―>張有博:C#編程基礎――類 小小張自由―>張有博:C#編程基礎――方法 小小張自由―>張有博:初始三層架構(超超超詳細) 小小張自由―>張有博:C#連接數據庫之Connection、Command、D 小小張自由―>張有博:System.ArgumentOutOfRangeException: 小小張自由―>張有博:機房重構之單例模式的應用 小小張自由―>張有博:機房重構之備忘錄模式的應用 小小張自由―>張有博:機房重構之職責鏈模式的應用 小小張自由―>張有博:HTML基礎――標簽 小小張自由―>張有博:div+css的入門知識 小小張自由―>張有博:CSS核心內容:標準流、盒子模型、浮動 小小張自由―>張有博:asp.net生成驗證碼并提交驗證 小小張自由―>張有博:XML基礎 小小張自由―>張有博:各種計算機語言簡短簡介 小小張自由―>張有博:2020年10月自考總結 小小張自由―>張有博:vs2019利用gitee(碼云)協作開發 小小張自由―>張有博:1024程序員節 小小張自由―>張有博:IDEA2020.3詳細安裝教程 小小張自由―>張有博:JavaWeb之Request與Response詳解 小小張自由―>張有博:JavaWeb之Filter和Listener 小小張自由―>張有博:Vue插件報錯:Vue.js is detected on t 小小張自由―>張有博:在項目中使用Spring Cloud Alibaba Sen 小小張自由―>張有博:在項目中使用OpenFeign 小小張自由―>張有博:解決idea打開Vue項目報紅 小小張自由―>張有博:CentOS7詳細安裝教程--圖文介紹超詳細 zhtbs的博客:Springboot 入門培訓 5 Thymeleaf 與 MVC項目搭建 zhtbs的博客:(Framework7 移動webapp) Springboot 入門培訓 7 zhtbs的博客:HTML+CSS+JavaScript 迷宮生成算法 【建議收藏】 zhtbs的博客:(Framework7 移動webapp) Springboot 入門培訓 8 C zhtbs的博客:Springboot 入門培訓 9 Security(一) 登錄驗證 zhtbs的博客:Springboot 入門培訓 4 WEB+JSP MVC項目搭建 zhtbs的博客:Springboot 入門培訓 10 Security(二) 數據庫DB 貓耳山在天邊:《Linux命令行與shell腳本編程大全》(第三版)讀 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 qq1113673178的博客:[學習][筆記] qt5 從入門到入墳:<12>Grap qq1113673178的博客:[學習][筆記] qt5 從入門到入墳:<13>基于 .net平臺的rabbitmq使用封裝demo詳解 C++類的特種函數生成機制詳解 Python調用百度AI實現圖片上表格識別功能 node自定義安裝更改npm全局模塊默認安裝路徑的步驟 帶你用C語言實現strtok和字符串分割函數 靜態網頁和靜態網頁性能比較 網頁標題優化原則和描述優化原則 php 怎么設置cookie記住密碼 php設置時區無效怎么辦 php __autoload 失效怎么辦 有關PHP調試的小技巧,看看吧! 從0開始:教你微信小店怎么開! 成本5元竟然賣50元 微信朋友圈賣面膜真黑啊 HashMap原理及put方法與get方法的調用過程 基于IDEA 的遠程調試 Weblogic的操作過程 UTC時間、GMT時間、本地時間、Unix時間戳的具體使用 如何利用SwiftUI實現可縮放的圖片預覽器 網站怎么利用內容更新雙重境界快速提高網站權重? php顯示繁體亂碼怎么辦 php不能開啟php_curl怎么辦
A级免费视频