1. 程式人生 > >Python 庫/模組/工具收集

Python 庫/模組/工具收集

1 演算法

1.1 字串處理

re

正則表示式的標準庫。

StringIO / cStringIO

以讀寫檔案的方式來操作字串(有點類似於記憶體檔案)。

cStringIO 是 C 語言實現的,提供高效能;而 StringIO 是 Python 實現的,提供 Unicode 相容性。

chardet 可以猜測任意一段文字的字符集編碼。對於編碼型別未知的文字,它會很有用。

chardet 既可以作為模組來使用,也可以作為命令列工具來使用。

程式碼示例

import chardet 
print chardet.detect(bytes)

1.2 數學類

math

這個標準庫顧名思義,封裝了常用的數學函式(開方、指數、對數、三角函式、等)

random

這個標準庫顧名思義,是用來進行隨機數生成的

程式碼示例

# 生成 0-100 的隨機數 
import random 
random.seed() 
random.randint(0, 100)

fractions

這個標準庫封裝了跟有理數(分數)相關的運算

1.3 安全類

hashlib

在 Python 2.5 版本加入到標準庫中。通過它,你可以很方便地計算各種雜湊值。

它支援的雜湊演算法有:MD5 SHA1 SHA224 SHA256 SHA384 SHA512

關於雜湊演算法,俺寫過一篇掃盲(在這裡)。

程式碼示例

# 計算字串的 SHA1 雜湊值 
import hashlib 
sha1 = hashlib.sha1('Hello world').hexdigest()

這個庫包含了常見的對稱加密演算法(DES、AES、IDEA、等)、公鑰加密演算法(RSA、DSA、等)、雜湊演算法(MD5、SHA1、RIPEMD、等)。

OpenSSL 在加密領域可是大名鼎鼎。這個庫使用 Python 對 OpenSSL 進行很薄的封裝。

2 跨程式語言

Python 可以很容易地跟其它程式語言整合。整合之後,就可以在 Python 程式碼中使用其它程式語言的函式、模組、庫,非常爽!

2.1 整合 C / C++ 語言

ctypes

ctypes 在 Python 2.5 版本加入到標準庫中。

通過它,你可以很方便地呼叫 C/C++ 動態庫匯出的函式,可以在 Python 中使用各種 C/C++ 的資料型別(比如指標)。

程式碼示例

# 呼叫 Linux/Unix 系統的標準 C 函式,獲取當前時間 
from ctypes import * 
libc = CDLL('libc.so.6') 
time = libc.time(None) 
 
# 呼叫 Windows 系統 API,彈出訊息提示框 
from ctypes import c_int, WINFUNCTYPE, windll 
from ctypes.wintypes import HWND, LPCSTR, UINT 
prototype = WINFUNCTYPE(c_int, HWND, LPCSTR, LPCSTR, UINT) 
paramflags = (1, 'hwnd', 0), (1, 'text', 'Hi'), (1, 'caption', None), (1, 'flags', 0) 
MessageBox = prototype(('MessageBoxA', windll.user32), paramflags) 
MessageBox(text='Hello world',flags=2)

SWIG

這是一個很老牌的、有名氣的工具,它可以把多種語言(Java、Python、C#、Ruby、PHP、Perl、Lua、Go、等)整合到 C/C++ 中。

這個工具可以讓你用 Python 的語法寫擴充套件模組的程式碼,然後它幫你把 Python 程式碼編譯為本地動態庫(機器碼)。

用它編譯出來的擴充套件模組,其效能跟 C/C++ 編寫的擴充套件模組相當。

2.2 整合 JVM 平臺

通過 Jython 可以讓 Python 程式碼執行在 JVM 上,並且可以呼叫其它的 JVM 語言的程式碼(比如 Java Scale)

2.3 整合 dotNet 平臺

通過 IronPython 可以讓 Python 程式碼執行在 dotNET 平臺上,並且可以呼叫其它的 dotNET 語言的程式碼(比如 C# F#)

2.4 整合 Objective-C 語言

這是用 Python 封裝 Mac OS X 上的 Objective-C 庫。

3 作業系統相關

os

這是一個非常基本的標準庫,提供了常見的作業系統相關操作。

3.1 檔案和目錄操作

shutil

相對於 os 標準庫,shutil 標準庫提供了一些比較高階的檔案和目錄操作(目錄遞迴複製、目錄遞迴刪除、目錄壓縮打包、等)

程式碼示例

# 遞迴刪除某個目錄 
import shutil 
shutil.rmtree(xxxx)

glob

這個標準庫用於查詢檔案(支援萬用字元)

程式碼示例

# 獲取當前目錄所有 txt 檔案 
import glob 
files = glob.glob('./*.txt')

fnmatch

這個標準庫用於匹配檔名(支援萬用字元)

程式碼示例

# 列出當前目錄所有 txt 檔案 
import os, fnmatch 
for file in os.listdir('.') : 
    if fnmatch.fnmatch(file, '*.txt') : 
        print(file)

tempfile

使用這個標準庫,可以安全地生成臨時檔案或臨時目錄。

3.2 本地程序間通訊(IPC)

subprocess / multiprocessing

用於程序管理的標準庫,可以啟動子程序,通過標準輸入輸出跟子程序互動。

其中 multiprocessing 是 2.6 版本加入到標準庫的。

signal

用於程序訊號處理的標準庫。

mmap

提供了記憶體對映檔案的支援。

程式碼示例

# 利用 mmap 在父子程序間交換資料 
import os 
import mmap 
 
map = mmap.mmap(-1, 13) 
map.write("Hello world") 
 
pid = os.fork() 
 
if pid == 0: # 子程序 
    map.seek(0) 
    print map.readline() 
    map.close()

3.3 Windows 系統相關

這個第三方庫封裝了 Windows API 及 COM API。通過它可以方便地用 Python 進行 Windows 程式設計(呼叫 COM 元件、編寫 Windows 服務、等)。

3.4 Linux / Unix 系統相關

syslog

通過這個標準庫,可以很方便地跟 POSIX 的 syslog 服務進行互動。

3.5 程式打包

PyInstaller 可以把你的 Python 程式碼製作成獨立執行的程式(不依賴 Python 環境就可以執行)。

該工具支援多種作業系統,包括:Windows、Linux、Mac OS X、Solaris、AIX、等。

py2exe 的功能類似 PyInstaller,但只支援 Windows 平臺。

它很類似於 py2exe,差別在於 py2exe 支援 Windows 平臺,而 py2app 支援 Mac OS X 平臺。

這套工具可以幫助你進行第三方庫的管理(下載、編譯、安裝、升級、解除安裝)

4 Web 開發

如今 Web 開發很火,俺把 Web 相關的單獨分一類。

4.1 HTTP 協議

httplib / httplib2 / http.request / urllib.parse

這幾個庫可以進行各種 HTTP 客戶端請求(GET、POST、等)。

Python2 的模組名叫 httplib / httplib2,到 Python3 模組名改為 http.request / urllib.parse

程式碼示例

# 讀取指定 URL 的網頁內容 
import urllib 
handle = urllib.urlopen('http://www.google.com') 
page = handle.read() 
handle.close()

4.2 Web Server

SimpleHTTPServer / http.server

提供輕量級 HTTP Server 的標準庫。

Python2 的模組名叫 SimpleHTTPServer,到 Python3 模組名改為 http.server

程式碼示例

#一個極簡單的 HTTP 服務 
import SocketServer 
import SimpleHTTPServer 
 
PORT = 8000 
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler 
httpd = SocketServer.TCPServer(('', PORT), Handler) 
print 'serving at port', PORT 
httpd.serve_forever()

4.3 Web 開發框架

在 Python 社群,Django 是目前最有影響力的 Web 開發框架。該框架很重型,內建了 Web 服務端開發常用的元件。

Django 應用範圍很廣,比如 Google 的 Web 開發平臺 GAE 就支援它。

Django 完全支援前面提到的 Jython 執行環境,可以執行在任何 J2EE 伺服器上。

又一個重型的 Web 開發框架,名氣僅次於 Django。

這是 FriendFeed 開發的 Web 框架。FriendFeed 被 Facebook 收購之後,該框架被開源。

Flask

這是一個很輕量級的 Web 框架,但是擴充套件性很好。

程式碼示例

# 用 Flask 寫 Hello world 
from flask import Flask 
app = Flask(__name__) 
  
@app.route("/") 
def hello(): 
    return "Hello World!" 
  
if __name__ == "__main__": 
    app.run()

4.4 Web前端 / JS整合

這是從 GWT(Google Web Toolkit)移植的第三方庫。提供了 Python 到 JS 的編譯,AJAX 框架等功能。 Pyjamas 甚至能用來開發桌面 GUI 應用。

這也是一個 Python 到 JavaScript 的編譯工具。

4.5 瀏覽器整合

webbrowser

操縱當前系統的預設瀏覽器,訪問指定 URL 的頁面。

程式碼示例

# 用預設瀏覽器開啟 Google 主頁 
import webbrowser 
webbrowser.open('http://www.google.com')

pyv8

v8 是 Google 開發的 JavaScript 解釋引擎。這是對 v8 引擎的 Python 封裝。

程式碼示例

import PyV8 
 
ctxt1 = PyV8.JSContext() 
ctxt1.enter() 
ctxt1.eval('1+2')  # 對 JS 表示式求值 
 
class Global(PyV8.JSClass) :  # 定義一個相容 JS 的類 
    def hello(self) : 
        print 'Hello world' 
 
ctxt2 = PyV8.JSContext(Global()) # 建立一個 JS 上下文,傳入 Global 類的物件 
ctxt2.enter()                     
ctxt2.eval('hello()')  # 呼叫 hello() 函式

WebKitGtk 是一個基於 WebKit 的 Web 渲染引擎。這是 WebKitGtk 的 Python 封裝。

5 網路程式設計

5.1 標準協議

5.1.1 鏈路層 / 網路層

Scapy

這是一個底層的網路庫,可以在不同協議層次構造網路資料包(包括鏈路層、網路層、傳輸層),還支援 Sniffer 抓包。

搞網路安全的網友應該會喜歡這個庫。

程式碼示例

# 傳統的 ping 掃描(網路層) 
ans,unans = sr(IP(dst='192.168.1.1-254')/ICMP()) 
 
# 區域網內的 ARP 掃描(鏈路層) 
ans,unans = srp(Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst='192.168.1.0/24'), timeout=2)

5.1.2 傳輸層

socket

Python 標準庫很早就提供了對 socket 程式設計的支援。

這個標準庫是對伯克利套接字進行簡單的封裝,其 API 基本上跟 BSD SOCKET 一一對應。

asyncore

這個標準庫提供了非同步 SOCKET 的支援。

asynchat

這個標準庫基於上述的 asyncore,提供更高層的 API,簡化非同步通訊程式設計。

5.1.3 應用層

ftplib

封裝 FTP 協議(檔案傳輸)的標準庫

smtplib

封裝 SMTP 協議(郵件傳送)的標準庫

imaplib

封裝 IMAP 協議(郵件接收)的標準庫

poplib

封裝 POP3 協議(郵件接收)的標準庫

cURL 是一個功能很強的網路庫/網路工具,支援 N 多應用層協議。這是用 Python 封裝的第三方庫。

關於 cURL,俺前幾年寫過一篇博文推薦它(在這裡)。

Jabber(又稱 XMPP)是IM(即時通訊)協議的標準。這是用 Python 封裝的第三方庫。

IRC 是 Internet Relay Chat 的縮寫。這是用 Python 封裝的第三方庫。

5.2 編碼和解碼

json

標準庫,提供 JSON 格式的編碼和解碼。

JSON 格式如今在 Web 開發中廣為應用。

程式碼示例

import json 
 
json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) 
# JSON 編碼 
# 得到如下字串 
# '["foo", {"bar": ["baz", null, 1.0, 2]}]' 
 
json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') 
# JSON 解碼 
# 得到如下物件 
# [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]

base64

標準庫,提供 Base16、Base32、Base64 格式的編碼和解碼。

binhex

標準庫,提供 binhex4 格式的編碼和解碼。

uu

標準庫,提供 uuencode 格式的編碼和解碼。

這是 Google 開發的一個跨語言的庫,用於網路傳輸的編碼和解碼。

它的優點是:跨多種語言、高效能、向前相容、向後相容。俺前幾年寫過一篇博文推薦 protobuf(在這裡)。

5.3 網路開發框架

這是一個基於 Python 網路通訊開發框架,有十多年曆史,名氣很大。

它的某些設計類似於 C++ 的 ACE 框架。除了能用來進行傳輸層(TCP UDP)的開發,還提供了若干應用層協議(HTTP、XMPP、SSH、IRC、等)的支援。

程式碼示例

# 實現一個簡單的 Echo 服務,監聽在 12345 埠 
from twisted.internet import protocol, reactor 
 
class Echo(protocol.Protocol) : 
    def dataReceived(self, data) : 
        self.transport.write(data) 
 
class EchoFactory(protocol.Factory) : 
    def buildProtocol(self, addr) : 
        return Echo() 
 
reactor.listenTCP(12345, EchoFactory()) 
reactor.run()

6 資料庫

為了便於資料庫開發,Python 社群制定了資料庫的 API 規範(PEP 249)。

只要是涉及到資料庫操作,標準庫和大部分第三方庫都會遵循該規範。請看如下幾個模組的示例程式碼。

6.1 資料庫中介軟體

6.1.1 ODBC

pyODBC 封裝了 ODBC API,通過它可以訪問各種資料庫(只要有 ODBC 驅動即可)。

程式碼示例

# 查詢某個 ODBC 資料來源的某個表 
import pyodbc 
conn = pyodbc.connect('DSN=xxx;PWD=password') 
cursor = conn.cursor() 
cursor.execute('SELECT field1 FROM table1') 
while True : 
    row = cursor.fetchone() 
    if not row : 
        break 
    print(row) 
cursor.close() 
conn.close()

又一個封裝 ODBC API 的第三方庫

6.1.2 JDBC

Jython 前面提到過。它可以基於 JDBC 操作資料庫。

6.1.3 ADO / ADO.NET

PyWin32 前面提到過。它可以基於 ADO 操作資料庫。

IronPython 前面提到過。它可以基於 ADO.NET 操作資料庫。

6.2 特定資料庫

6.2.1 MySQL

操作 MySQL 的第三方庫。

程式碼示例

# 查詢某個 MySQL 資料庫的某個表 
import MySQLdb 
conn = MySQLdb.connect(db='test', passwd='password') 
cursor = conn.cursor() 
cursor.execute('SELECT field1 FROM table1') 
while True : 
    row = cursor.fetchone() 
    if not row : 
        break 
    print(row) 
cursor.close() 
conn.close()

6.2.2 PostgreSQL

操作 PostgreSQL 的第三方庫。

操作 PostgreSQL 的第三方庫。

6.2.3 Oracle

操作 Oracle 的第三方庫。

6.2.4 MS SQL Server

操作微軟 SQL Server 的第三方庫。

6.2.5 IBM DB2

操作 DB2 的第三方庫。

6.2.6 SQLite

sqlite3

sqlite3 從 Python 2.5 版本開始加入到標準庫中。通過它,你可以很方便地操作 SQLite 資料庫。

SQLite 是一個很優秀的輕量級資料庫,俺前幾年寫過一篇博文推薦它(在這裡)。

程式碼示例

# 建立一個記憶體資料庫,建表並插入記錄 
import sqlite3 
conn = sqlite3.connect(':memory:') 
cursor = conn.cursor() 
cursor.execute('CREATE TABLE person (name text, age int)') 
cursor.execute('''INSERT INTO stocks VALUES ('TOM',20)''') 
conn.commit() 
conn.close()

6.2.7 Berkeley DB

操作 Berkeley DB 的第三方庫。

6.3 ORM(Object-Relational Mapping)

SQLAlchemy 支援的資料庫有:MySQL、PostgreSQL、Sqlite、Oracle、MS SQL Server、Firebird、Sybase SQL Server、Informix、等。

程式碼示例

# 通過物件的方式建立兩張依賴關係的表 
from sqlalchemy import * 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import relation, sessionmaker 
  
Base = declarative_base() 
  
class Movie(Base) : 
    __tablename__ = 'movies' 
  
    id = Column(Integer, primary_key=True) 
    title = Column(String(255), nullable=False) 
    year = Column(Integer) 
    directed_by = Column(Integer, ForeignKey('directors.id')) 
    director = relation('Director', backref='movies', lazy=False) 
  
    def __init__(self, title=None, year=None) : 
        self.title = title 
        self.year = year 
 
    def __repr__(self) : 
        return 'Movie(%r, %r, %r)' % (self.title, self.year, self.director) 
  
class Director(Base) : 
    __tablename__ = 'directors' 
  
    id = Column(Integer, primary_key=True) 
    name = Column(String(50), nullable=False, unique=True) 
  
    def __init__(self, name=None) : 
        self.name = name 
  
    def __repr__(self) : 
        return 'Director(%r)' % (self.name) 
  
Base.metadata.create_all(create_engine('dbms://user:[email protected]/dbname'))

SQLObject 支援的資料庫有:MySQL、PostgreSQL、Sqlite、MS SQL Server、Firebird、Sybase SQL Server、SAP DB、等。

程式碼示例

# 通過物件的方式建立表 
from sqlobject import * 
sqlhub.processConnection = connectionForURI('sqlite:/:memory:') 
 
class Person(SQLObject) : 
    first_name = StringCol() 
    last_name = StringCol() 
 
Person.createTable()

7 桌面 GUI 開發

7.1 GUI 框架 / 元件庫

7.1.1 基於 Tk

Tk 是一個跨平臺的介面元件庫。

Tkinter / tkinter

這是 Python 內建的標準庫,封裝了 Tcl/Tk 介面庫。

Python2 的模組名叫 Tkinter,到 Python3 模組名改為 tkinter

程式碼示例

# 用 Tkinter 寫 Hello world 
from Tkinter import * 
 
if __name__ == '__main__' : 
    root = Tk() 
    label = Label(root, text='Hello world') 
    label.pack() 
    root.mainloop()

7.1.2 基於 wxWidgets

wxWidgets 是 C++ 開發的跨平臺框架(不僅包括 GUI,還有其它功能)。

在所有的 wxWidgets 的 Python 封裝庫中,這個是名氣最大的。

Ulipad(知名的國產的 Python IDE)就是基於 wxPython 開發的。

程式碼示例

# 用 wxPython 寫 Hello world 
import wx 
 
class Frame(wx.Frame) : 
    pass 
 
class App(wx.App) : 
    def OnInit(self) : 
        self.frame = Frame(parent=None, title='Hello world') 
        self.frame.Show() 
        self.SetTopWindow(self.frame) 
        return True 
 
if __name__ == '__main__' : 
    app = App() 
    app.MainLoop()

又一個基於 wxWidgets 的 GUI 庫。

7.1.3 基於 GTK+

GTK+ 全稱是(GIMP Toolkit),由 C 開發的跨平臺介面元件庫。

PyGTK

這是 Python 對 GTK 的封裝。

程式碼示例

# 用 PyGTK 寫 Hello world 
import pygtk 
pygtk.require('2.0') 
import gtk 
 
class HelloWorld : 
    def __init__(self) : 
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
        self.window.connect('delete_event', self.delete_event) 
        self.window.connect('destroy', self.destroy) 
        self.window.set_border_width(10) 
 
        self.button = gtk.Button('Hello world') 
        self.button.connect('clicked', self.hello, None) 
        self.button.connect_object('clicked', gtk.Widget.destroy, self.window) 
        self.window.add(self.button) 
 
        self.button.show() 
        self.window.show() 
 
    def main(self) : 
        gtk.main() 
 
    def hello(self, widget, data=None) : 
        print 'Hello world' 
 
    def delete_event(self, widget, event, data=None) : 
        print 'delete event occurred' 
        return False 
 
    def destroy(self, widget, data=None) : 
        gtk.main_quit() 
 
if __name__ == '__main__' : 
    hello = HelloWorld() 
    hello.main()

7.1.4 基於 Qt

Qt 是 C++ 開發的跨平臺框架(不僅包括 GUI,還有其它功能)。

PyQt

這是 Python 對 Qt 的封裝。

程式碼示例

# 用 pyQt 寫 Hello world 
import sys 
from PyQt4.QtGui import * 
 
if __name__ == '__main__' : 
    app = QApplication(sys.argv) 
    window = QWidget() 
 
    window.resize(320, 240) 
    window.setWindowTitle('Hello world') 
    window.show() 
    sys.exit(app.exec_())

這也是 Python 對 Qt 的封裝。

7.1.5 基於 FLTK

FLTK 全稱是( Fast Light Tool Kit),由 C++ 開發的跨平臺、輕量級介面元件庫。

這是 Python 對 FLTK 的封裝。

7.1.6 基於 Windows 平臺

PyWin32 前面提到過。它可以提供原生的 Windows GUI 介面。

IronPython 前面提到過。它可以提供 dotNET 的 GUI 介面。

7.1.7 基於 JVM 平臺

Jython 前面提到過。它可以提供基於 Java 的 Swing 介面。

7.1.8 其它

EasyGUI 這是一個很輕量級的庫。跟其它 GUI 不同之處在於——沒有事件驅動。

PyGUI

PyGUI 是一個更高層的 GUI 庫,底層分別封裝了 PyWin32(Windows 平臺)、PyGTK(Linux 平臺)、PyObjC(Mac OS X 平臺)。

Kivy

跨平臺的多媒體框架和介面庫,用來開發比較炫的介面。

除了支援桌面作業系統,還支援 Android / iOS,支援多點觸控。

基於 PyGame 的一個跨平臺 GUI 庫。PyGame 下面會提到。

7.2 圖表/報表

這是一個有名的圖形庫,主要用來繪製數學相關的圖形。

跟後面提到的 SciPy 整合可以起到類似 MATLAB 的效果。效果圖在“這裡”。

這是 Python 對 gnuplot 的封裝。gnuplot 的效果圖在“這裡”。

這是一個純 Python 的庫,依賴於 PyQt4 / PySide。效果圖在“這裡”。

PyX

這個庫可以跟 TeX / LaTeX 無縫整合,支援匯出為 PostScript / PDF 格式。適合用來製作報表。效果圖在“這裡”。

Chaco

這是一個商業公司維護的庫,主要提供2維圖表。效果圖在“這裡”。

8 處理檔案格式

8.1 處理壓縮檔案 / 打包檔案

8.1.1 zip

zipfile

處理 zip 格式的標準庫。

8.1.2 bzip2(bz2)

bz2

處理 bzip2 格式的標準庫。

8.1.3 gzip(gz)

gzip

處理 gzip 格式的標準庫。

zlib

處理 gzip 格式的標準庫。

8.1.4 tar

tarfile

處理 tar 格式的標準庫。

8.1.5 7zip(7z)

處理 7zip 格式的第三方庫。

8.1.6 rar

處理 rar 格式的第三方庫。

8.1.7 msi

msilib

處理 msi 格式的標準庫,從 Python 2.5 版本開始提供。

8.2 處理標記語言

8.2.1 XML

xml.dom / xml.miniDom / xml.etree.ElementTree

用 DOM(Document Object Model)方式處理 XML 檔案的標準庫。

xml.sax / xml.parsers.expat

用 SAX(Simple API for XML)方式處理 XML 檔案的標準庫。

lxml

著名的 C 語言庫 libxml 和 libxslt 的 Python 封裝。

功能很強,支援 XPath 1.0、XSLT 1.0、擴充套件 EXSLT、等。還可以用來解析 HTML 格式。

8.2.2 HTML

HTMLParser

以回撥方式解析 HTML/XHTML 檔案內容的標準庫。

8.3 處理圖片

這是一個很有名氣的 Python 影象處理庫,支援常見影象檔案格式(BMP、JPG、GIF、PNG、等),可以對影象進行各種常見操作(格式轉換、旋轉、縮放、剪下、等)。

程式碼示例

# 旋轉某圖片並顯示 
from PIL import Image 
im = Image.open('xxx.jpg') 
im = im.rotate(90) 
im.show()

8.4 處理 PDF

這是 FPDF 的 Python 移植庫,用來生成 PDF 文件。

支援的功能比較全(嵌入字型、嵌入圖片),文件也比較詳細。

程式碼示例

# 這是個簡單 Hello World 示例 
from fpdf import FPDF 
 
pdf = FPDF() 
pdf.add_page() 
pdf.set_font('Arial', 'B', 16) 
pdf.cell(40, 10, 'Hello World') 
pdf.output('test.pdf', 'F')
# 支援寫入 HTML 語法。目前支援幾種常見的 HTML tag 
from pyfpdf import FPDF, HTMLMixin 
 
class MyFPDF(FPDF, HTMLMixin) : 
    pass 
                     
pdf = MyFPDF() 
pdf.add_page() 
pdf.write_html(html) 
pdf.output('test.pdf', 'F')

pyPdf 目前已經不繼續升級維護了。PyPDF2 是 pyPdf 的 fork 並繼續增加新功能。

除了可以提取檔案屬性,還可以切分/合併文件,加密/解密文件。

可以提取 PDF 檔案屬性以及每頁的文字,支援把內容輸出為 HTML 格式。

8.5 處理 Office 文件

8.5.1 Word(doc、docx)

PyWin32 前面提到過。它可以基於 COM 操作 Office 文件,包括 Word(本地需要安裝 Office)。

8.5.2 Excel(xls、xlsx)

該庫可以支援 Office Excel(97/2000/XP/2003)以及 OpenOffice Calc 的文件。無需依賴外部軟體。

PyWin32 前面提到過。它可以基於 COM 操作 Office 文件,包括 Excel(本地需要安裝 Office)。

8.5.3 Power Point(ppt、pptx)

該庫可以用來生成 pptx(Open XML PowerPoint)格式的文件。

PyWin32 前面提到過。它可以基於 COM 操作 Office 文件,包括 Excel(本地需要安裝 Office)。

8.6 處理 CHM

PyCHM

這是基於 chmlib 的 Python 封裝庫。可以提取 CHM 檔案的屬性以及每個頁面的內容。

8.7 處理 RTF

PyRTF

這個 Python 庫可以用來處理 RTF(富文字格式)文件。

9 遊戲開發

跨平臺的 Python 第三方庫,用來輔助遊戲開發的,名氣非常大。

封裝 OpenGL 的 Python 第三方庫。

封裝 OGRE(3D 渲染引擎)的 Python 第三方庫。

10 數值計算 / 科學計算

NumPy

NumPy 提供了功能強大、效能很高的數值陣列,可以用來進行各種數值計算(包括矩陣運算)。

程式碼示例

# 以下是傳統 Python 寫法,冗長且速度較慢 
a = range(10000000) 
b = range(10000000) 
c = [] 
for i in range(len(a)) : 
    c.append(a[i] + b[i]) 
 
# 以下是 NumPy 的寫法,簡潔且速度飛快 
import numpy as np 
a = np.arange(10000000) 
b = np.arange(10000000) 
c = a + b

SciPy

SciPy 依賴 NumPy 提供的多維陣列。相比 NumPy,SciPy 提供了更高層的數學運算模組(統計、線性代數、積分、常微分方程求解、傅立葉變換、訊號處理、等),被廣泛用於科研和工程領域。

11 其它

一些不方便歸類的,暫時放到這裡。

PyPy

這是一個用 Python 寫的 Python 直譯器(有點繞口令)。

PyPy 支援 JIT(Just-in-time compilation)和沙箱技術,可做到比 CPython 更快的執行速度。

相關推薦

Python /模組/工具收集

1 演算法 1.1 字串處理 re 正則表示式的標準庫。 StringIO / cStringIO 以讀寫檔案的方式來操作字串(有點類似於記憶體檔案)。 cStringIO 是 C 語言實現的,提供高效能;而 StringIO 是 Python 實現的,提供 Unicode 相容性。 cha

Python安裝工具

介紹 文件 pytho 安裝工具 xgboost uci 庫文件 sdn ref Python庫安裝工具 打開Anaconda Prompt,輸入conda list,可以看到當前已經安裝好的庫。 安裝庫,輸入pip install xgboost(庫的名稱) 可以到這個

python/模組之pygraphviz 1.3.1安裝

pygraphviz安裝查看了網上很多資料,試驗了很久,終於安裝成功了。 PS:windows系統,64位Win7,64位python2.7.11 參考資料:http://www.cnblogs.com/AimeeKing/p/5021675.html 一、下載相

Python管理工具pip在Mac上安裝解除安裝

1. pip下載安裝 1.1 pip下載 wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-chec

Python管理工具

其實想想為什麼python近來這麼流行,與其豐富的庫資源不無關係,實際上手動配置Python庫也很簡單,只要熟悉Python包,模組的檔案組織結構以及路徑變數即可實現部署(可參考http://blog.

各種 Python /模塊/工具

開發框架 light 動態庫 ase received pyo 協議 environ self. 1 算法 1.1 字符串處理 re 正則表達式的標準庫。 StringIO / cStringIO 以讀寫文件的方式來操作字符串(有點類似於內存文件)。 cStringIO 是

Windows環境下python爬蟲常用工具的安裝(UrlLib、Re、Requests、Selenium、lxml、Beautiful Soup、PyQuery 、PyMySQL等等)

本文列出了使用python進行爬蟲時所需的常用庫和工具的安裝過程,基本上只有幾行命令列的功夫就可以搞定,還是十分簡單的。 一、UrlLib 與 Re 這兩個庫是python的內建庫,若系統中已經成功安裝了python的話,這兩個庫一般是沒有什麼問題的。 驗證 開啟命令列,進入

Python: PrettyTable 模組

一,PrettyTable簡介 PrettyTable是python中的一個第三方庫,可用來生成美觀的ASCII格式的表格: 二,PrettyTable安裝 使用PIP即可十分方便的安裝PrettyTable,如下: pip install prettytable 三,PrettyTable匯入&nbs

python tkinker模組詳解

1、指令碼名稱不能命名為模組名,否則會報: Traceback (most recent call last):   File "C:/Users/Administrator/PycharmProjects/untitled/python/web/tkinter.py", line 1

可愛的python測試開發(python測試開發工具彙總)

歡迎轉載,轉載請註明來源: github地址 謝謝點贊 本文地址 Python測試開發庫 參考資料 https://github.com/vinta/awesome-python https://github.com/atinfo/awesome-test-automation

Python常用模組下載及安裝

一、Python模組下載: http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql(日常常用包都有) Python模組(第三方庫): https://pypi.python.org/pypi 二、Python庫安裝: 方法1: 單檔案

python標準模組

06/07 20:10:08 編譯 def function(a, b): print a, b apply(function, (“whither”, “canada?”)) apply(function, (1, 2 + 3)) whither canad

關於使用CMD安裝Python第三方模組BeautifulSoup失敗的解決方法

文章目錄 問題產生 探索過程 解決方法 另外 問題產生 在進行爬蟲抓取時,需要安裝第三方模組庫BeautifulSoup。 探索過程 嘗試使用pip install BeautifulSoup 問題一: SyntaxErr

關於使用CMD安裝Python第三方模組jieba失敗的解決方法

文章目錄 問題產生 探索過程 解決方法 問題產生 在進行中文文字詞頻統計時,需要安裝第三方模組庫jieba。 探索過程 但我在cmd命令列中鍵入: pip install jieba 問題1:找不到pip命令。 設定

Python常用工具

(Ⅰ)Python四個常用庫 1. numpy:(Numeric Python 開源的 數值計算擴充套件。可用來儲存和處理大型矩陣) 一個用python實現的 科學計算包。 包括:1、一個強大的N維陣列物件Array;2、比較成熟的(廣播)函式庫;3、用於整合C/C++和Fortra

Python中requests模組和lxml模組安裝問題(windows下)

1.requests模組安裝: 第一次匯入requests模組,會報mportError: No module named requests的錯。這就是沒有成功匯入requests模組。 2.lxml模組安裝問題: 1.進入http://www.lfd

Windows系統·新增Python import 的/模組路徑

方式一:通過sys模組動態新增 import sys sys.path.append(r'newlib_path') 方式二:通過檔案進行設定 在Python的安裝目錄下,找到 \Lib

python第三方模組安裝問題收集Updating...

Linux下安裝 [ ] paramiko 獲取paramiko包 [root@localhost]# wget https://pypi.python.org/packages/64/7

python常用的標準模組

https://www.cnblogs.com/yuanchenqi/articles/5732581.html 源部落格–Yuan先生 環境變數 # 臨時新增環境變數 import sys sys.path.append() #如果需要永久修改 #去修改系統的環境變數 #

Revit中Dynamo程式設計——Python Script模組(引用RevitApi、RevitApiUI、math

Revit中Dynamo中的Python Script模組能夠自由程式設計,做Revit二次開發的人能夠很熟練的使用Revit的API,但是都是用的C#語言,而且是在Visual Studio的環境中使用的。如果能夠在Python Script模組中自由使用Re