python项目示例 - CSDN
精华内容
参与话题
  • 本页面是俺收集的各种 Python 资源,不定期更新。 下面列出的各种 Python 库/模块/工具,如果名称带超链接,说明是第三方的;否则是 Python 语言内置的。 1 算法 1.1 字符串处理 1.2 数学类 1.3 ...

    本页面是俺收集的各种 Python 资源,不定期更新。

    下面列出的各种 Python 库/模块/工具,如果名称带超链接,说明是第三方的;否则是 Python 语言内置的。

     


     

     

     

     



     

    1 算法

    1.1 字符串处理

    re

    正则表达式的标准库。

    StringIO / cStringIO

    以读写文件的方式来操作字符串(有点类似于内存文件)。

    cStringIO 是 C 语言实现的,提供高性能;而 StringIO 是 Python 实现的,提供 Unicode 兼容性。

    chardet

    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()

    PyCrypto

    这个库包含了常见的对称加密算法(DES、AES、IDEA、等)、公钥加密算法(RSA、DSA、等)、散列算法(MD5、SHA1、RIPEMD、等)。

    pyOpenSSL

    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++ 中。

    Cython

    这个工具可以让你用 Python 的语法写扩展模块的代码,然后它帮你把 Python 代码编译为本地动态库(机器码)。

    用它编译出来的扩展模块,其性能跟 C/C++ 编写的扩展模块相当。

    2.2 整合 JVM 平台

    Jython

    通过 Jython 可以让 Python 代码运行在 JVM 上,并且可以调用其它的 JVM 语言的代码(比如 Java Scale)

    2.3 整合 dotNet 平台

    IronPython

    通过 IronPython 可以让 Python 代码运行在 dotNET 平台上,并且可以调用其它的 dotNET 语言的代码(比如 C# F#)

    2.4 整合 Objective-C 语言

    PyObjC

    这是用 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 系统相关

    PyWin32

    这个第三方库封装了 Windows API 及 COM API。通过它可以方便地用 Python 进行 Windows 编程(调用 COM 组件、编写 Windows 服务、等)。

    3.4 Linux / Unix 系统相关

    syslog

    通过这个标准库,可以很方便地跟 POSIX 的 syslog 服务进行交互。

    3.5 程序打包

    PyInstaller

    PyInstaller 可以把你的 Python 代码制作成独立运行的程序(不依赖 Python 环境就可以运行)。

    该工具支持多种操作系统,包括:Windows、Linux、Mac OS X、Solaris、AIX、等。

    py2exe

    py2exe 的功能类似 PyInstaller,但只支持 Windows 平台。

    py2app

    它很类似于 py2exe,差别在于 py2exe 支持 Windows 平台,而 py2app 支持 Mac OS X 平台。

    EasyInstall / Setuptools

    这套工具可以帮助你进行第三方库的管理(下载、编译、安装、升级、卸载)

     


     

    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 开发框架

    Django

    在 Python 社区,Django 是目前最有影响力的 Web 开发框架。该框架很重型,内置了 Web 服务端开发常用的组件。

    Django 应用范围很广,比如 Google 的 Web 开发平台 GAE 就支持它。

    Django 完全支持前面提到的 Jython 运行环境,可以运行在任何 J2EE 服务器上。

    TurboGears

    又一个重型的 Web 开发框架,名气仅次于 Django。

    Tornado

    这是 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整合

    Pyjamas / pyjs

    这是从 GWT(Google Web Toolkit)移植的第三方库。提供了 Python 到 JS 的编译,AJAX 框架等功能。 Pyjamas 甚至能用来开发桌面 GUI 应用。

    pyjaco

    这也是一个 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() 函数

    PyWebKitGtk

    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 协议(邮件接收)的标准库

    PycURL

    cURL 是一个功能很强的网络库/网络工具,支持 N 多应用层协议。这是用 Python 封装的第三方库。

    关于 cURL,俺前几年写过一篇博文推荐它(在这里)。

    jabber.py

    Jabber(又称 XMPP)是IM(即时通信)协议的标准。这是用 Python 封装的第三方库。

    irclib

    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 格式的编码和解码。

    Protocol Buffers(protobuf)

    这是 Google 开发的一个跨语言的库,用于网络传输的编码和解码。

    它的优点是:跨多种语言、高性能、向前兼容、向后兼容。俺前几年写过一篇博文推荐 protobuf(在这里)。

    5.3 网络开发框架

    Twisted

    这是一个基于 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

    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()

    ceODBC

    又一个封装 ODBC API 的第三方库

    6.1.2 JDBC

    Jython

    Jython 前面提到过。它可以基于 JDBC 操作数据库。

    6.1.3 ADO / ADO.NET

    PyWin32

    PyWin32 前面提到过。它可以基于 ADO 操作数据库。

    IronPython

    IronPython 前面提到过。它可以基于 ADO.NET 操作数据库。

    6.2 特定数据库

    6.2.1 MySQL

    MySQL for Python

    操作 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

    psycopg

    操作 PostgreSQL 的第三方库。

    psycopg

    操作 PostgreSQL 的第三方库。

    6.2.3 Oracle

    cx_Oracle

    操作 Oracle 的第三方库。

    6.2.4 MS SQL Server

    pymssql

    操作微软 SQL Server 的第三方库。

    6.2.5 IBM DB2

    ibm-db

    操作 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

    PyBSDDB

    操作 Berkeley DB 的第三方库。

    6.3 ORM(Object-Relational Mapping)

    SQLAlchemy

    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:pwd@host/dbname'))

    SQLObject

    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,还有其它功能)。

    wxPython

    在所有的 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()

    PythonCard

    又一个基于 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_())

    PySide

    这也是 Python 对 Qt 的封装。

    7.1.5 基于 FLTK

    FLTK 全称是( Fast Light Tool Kit),由 C++ 开发的跨平台、轻量级界面组件库。

    PyFLTK

    这是 Python 对 FLTK 的封装。

    7.1.6 基于 Windows 平台

    PyWin32

    PyWin32 前面提到过。它可以提供原生的 Windows GUI 界面。

    IronPython

    IronPython 前面提到过。它可以提供 dotNET 的 GUI 界面。

    7.1.7 基于 JVM 平台

    Jython

    Jython 前面提到过。它可以提供基于 Java 的 Swing 界面。

    7.1.8 其它

    EasyGUI

    EasyGUI 这是一个很轻量级的库。跟其它 GUI 不同之处在于——没有事件驱动。

    PyGUI

    PyGUI 是一个更高层的 GUI 库,底层分别封装了 PyWin32(Windows 平台)、PyGTK(Linux 平台)、PyObjC(Mac OS X 平台)。

    Kivy

    跨平台的多媒体框架和界面库,用来开发比较炫的界面。

    除了支持桌面操作系统,还支持 Android / iOS,支持多点触摸。

    OcempGUI

    基于 PyGame 的一个跨平台 GUI 库。PyGame 下面会提到。

    7.2 图表/报表

    matplotlib

    这是一个有名的图形库,主要用来绘制数学相关的图形。

    跟后面提到的 SciPy 整合可以起到类似 MATLAB 的效果。效果图在“这里”。

    Gnuplot.py

    这是 Python 对 gnuplot 的封装。gnuplot 的效果图在“这里”。

    PyQtGraph

    这是一个纯 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)

    PyLZMA

    处理 7zip 格式的第三方库。

    8.1.6 rar

    rarfile

    处理 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 Imaging Library (PIL)

    这是一个很有名气的 Python 图像处理库,支持常见图像文件格式(BMP、JPG、GIF、PNG、等),可以对图像进行各种常见操作(格式转换、旋转、缩放、剪切、等)。

    代码示例

    # 旋转某图片并显示 
    from PIL import Image 
    im = Image.open('xxx.jpg') 
    im = im.rotate(90) 
    im.show()

    8.4 处理 PDF

    pyfpdf

    这是 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 目前已经不继续升级维护了。PyPDF2 是 pyPdf 的 fork 并继续增加新功能。

    除了可以提取文件属性,还可以切分/合并文档,加密/解密文档。

    PDFMiner

    可以提取 PDF 文件属性以及每页的文本,支持把内容输出为 HTML 格式。

    8.5 处理 Office 文档

    8.5.1 Word(doc、docx)

    PyWin32

    PyWin32 前面提到过。它可以基于 COM 操作 Office 文档,包括 Word(本地需要安装 Office)。

    8.5.2 Excel(xls、xlsx)

    pyExcelerator

    该库可以支持 Office Excel(97/2000/XP/2003)以及 OpenOffice Calc 的文档。无需依赖外部软件。

    PyWin32

    PyWin32 前面提到过。它可以基于 COM 操作 Office 文档,包括 Excel(本地需要安装 Office)。

    8.5.3 Power Point(ppt、pptx)

    python-pptx

    该库可以用来生成 pptx(Open XML PowerPoint)格式的文档。

    PyWin32

    PyWin32 前面提到过。它可以基于 COM 操作 Office 文档,包括 Excel(本地需要安装 Office)。

    8.6 处理 CHM

    PyCHM

    这是基于 chmlib 的 Python 封装库。可以提取 CHM 文件的属性以及每个页面的内容。

    8.7 处理 RTF

    PyRTF

    这个 Python 库可以用来处理 RTF(富文本格式)文档。

     


     

    9 游戏开发

    PyGame

    跨平台的 Python 第三方库,用来辅助游戏开发的,名气非常大。

    PyOpenGL

    封装 OpenGL 的 Python 第三方库。

    Python-Ogre

    封装 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 更快的运行速度。

    转载于:https://www.cnblogs.com/sy270321/p/5034115.html

    展开全文
  • PYTHON开源项目示例代码

    千次阅读 2018-03-07 17:19:08
    1 算法1.1 字符串处理1.2 数学类1.3 安全类2 跨编程语言2.1 整合 C / C++ 语言2.2 整合 JVM 平台2.3 整合 dotNet 平台2.4 整合 Objective-C 语言3 操作系统相关3.1 文件和目录操作3.2 本地进程间通信(IPC)3.3 ...

     

     



     

    1 算法

    1.1 字符串处理

    re

    正则表达式的标准库。

    StringIO / cStringIO

    以读写文件的方式来操作字符串(有点类似于内存文件)。

    cStringIO 是 C 语言实现的,提供高性能;而 StringIO 是 Python 实现的,提供 Unicode 兼容性。

    chardet

    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()

    PyCrypto

    这个库包含了常见的对称加密算法(DES、AES、IDEA、等)、公钥加密算法(RSA、DSA、等)、散列算法(MD5、SHA1、RIPEMD、等)。

    pyOpenSSL

    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++ 中。

    Cython

    这个工具可以让你用 Python 的语法写扩展模块的代码,然后它帮你把 Python 代码编译为本地动态库(机器码)。

    用它编译出来的扩展模块,其性能跟 C/C++ 编写的扩展模块相当。

    2.2 整合 JVM 平台

    Jython

    通过 Jython 可以让 Python 代码运行在 JVM 上,并且可以调用其它的 JVM 语言的代码(比如 Java Scale)

    2.3 整合 dotNet 平台

    IronPython

    通过 IronPython 可以让 Python 代码运行在 dotNET 平台上,并且可以调用其它的 dotNET 语言的代码(比如 C# F#)

    2.4 整合 Objective-C 语言

    PyObjC

    这是用 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 系统相关

    PyWin32

    这个第三方库封装了 Windows API 及 COM API。通过它可以方便地用 Python 进行 Windows 编程(调用 COM 组件、编写 Windows 服务、等)。

    3.4 Linux / Unix 系统相关

    syslog

    通过这个标准库,可以很方便地跟 POSIX 的 syslog 服务进行交互。

    3.5 程序打包

    PyInstaller

    PyInstaller 可以把你的 Python 代码制作成独立运行的程序(不依赖 Python 环境就可以运行)。

    该工具支持多种操作系统,包括:Windows、Linux、Mac OS X、Solaris、AIX、等。

    py2exe

    py2exe 的功能类似 PyInstaller,但只支持 Windows 平台。

    py2app

    它很类似于 py2exe,差别在于 py2exe 支持 Windows 平台,而 py2app 支持 Mac OS X 平台。

    EasyInstall / Setuptools

    这套工具可以帮助你进行第三方库的管理(下载、编译、安装、升级、卸载)

     


     

    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 开发框架

    Django

    在 Python 社区,Django 是目前最有影响力的 Web 开发框架。该框架很重型,内置了 Web 服务端开发常用的组件。

    Django 应用范围很广,比如 Google 的 Web 开发平台 GAE 就支持它。

    Django 完全支持前面提到的 Jython 运行环境,可以运行在任何 J2EE 服务器上。

    TurboGears

    又一个重型的 Web 开发框架,名气仅次于 Django。

    Tornado

    这是 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整合

    Pyjamas / pyjs

    这是从 GWT(Google Web Toolkit)移植的第三方库。提供了 Python 到 JS 的编译,AJAX 框架等功能。 Pyjamas 甚至能用来开发桌面 GUI 应用。

    pyjaco

    这也是一个 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() 函数

    PyWebKitGtk

    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 协议(邮件接收)的标准库

    PycURL

    cURL 是一个功能很强的网络库/网络工具,支持 N 多应用层协议。这是用 Python 封装的第三方库。

    关于 cURL,俺前几年写过一篇博文推荐它(在这里)。

    jabber.py

    Jabber(又称 XMPP)是IM(即时通信)协议的标准。这是用 Python 封装的第三方库。

    irclib

    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 格式的编码和解码。

    Protocol Buffers(protobuf)

    这是 Google 开发的一个跨语言的库,用于网络传输的编码和解码。

    它的优点是:跨多种语言、高性能、向前兼容、向后兼容。俺前几年写过一篇博文推荐 protobuf(在这里)。

    5.3 网络开发框架

    Twisted

    这是一个基于 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

    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()

    ceODBC

    又一个封装 ODBC API 的第三方库

    6.1.2 JDBC

    Jython

    Jython 前面提到过。它可以基于 JDBC 操作数据库。

    6.1.3 ADO / ADO.NET

    PyWin32

    PyWin32 前面提到过。它可以基于 ADO 操作数据库。

    IronPython

    IronPython 前面提到过。它可以基于 ADO.NET 操作数据库。

    6.2 特定数据库

    6.2.1 MySQL

    MySQL for Python

    操作 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

    psycopg

    操作 PostgreSQL 的第三方库。

    psycopg

    操作 PostgreSQL 的第三方库。

    6.2.3 Oracle

    cx_Oracle

    操作 Oracle 的第三方库。

    6.2.4 MS SQL Server

    pymssql

    操作微软 SQL Server 的第三方库。

    6.2.5 IBM DB2

    ibm-db

    操作 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

    PyBSDDB

    操作 Berkeley DB 的第三方库。

    6.3 ORM(Object-Relational Mapping)

    SQLAlchemy

    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:pwd@host/dbname'))

    SQLObject

    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,还有其它功能)。

    wxPython

    在所有的 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()

    PythonCard

    又一个基于 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_())

    PySide

    这也是 Python 对 Qt 的封装。

    7.1.5 基于 FLTK

    FLTK 全称是( Fast Light Tool Kit),由 C++ 开发的跨平台、轻量级界面组件库。

    PyFLTK

    这是 Python 对 FLTK 的封装。

    7.1.6 基于 Windows 平台

    PyWin32

    PyWin32 前面提到过。它可以提供原生的 Windows GUI 界面。

    IronPython

    IronPython 前面提到过。它可以提供 dotNET 的 GUI 界面。

    7.1.7 基于 JVM 平台

    Jython

    Jython 前面提到过。它可以提供基于 Java 的 Swing 界面。

    7.1.8 其它

    EasyGUI

    EasyGUI 这是一个很轻量级的库。跟其它 GUI 不同之处在于——没有事件驱动。

    PyGUI

    PyGUI 是一个更高层的 GUI 库,底层分别封装了 PyWin32(Windows 平台)、PyGTK(Linux 平台)、PyObjC(Mac OS X 平台)。

    Kivy

    跨平台的多媒体框架和界面库,用来开发比较炫的界面。

    除了支持桌面操作系统,还支持 Android / iOS,支持多点触摸。

    OcempGUI

    基于 PyGame 的一个跨平台 GUI 库。PyGame 下面会提到。

    7.2 图表/报表

    matplotlib

    这是一个有名的图形库,主要用来绘制数学相关的图形。

    跟后面提到的 SciPy 整合可以起到类似 MATLAB 的效果。效果图在“这里”。

    Gnuplot.py

    这是 Python 对 gnuplot 的封装。gnuplot 的效果图在“这里”。

    PyQtGraph

    这是一个纯 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)

    PyLZMA

    处理 7zip 格式的第三方库。

    8.1.6 rar

    rarfile

    处理 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 Imaging Library (PIL)

    这是一个很有名气的 Python 图像处理库,支持常见图像文件格式(BMP、JPG、GIF、PNG、等),可以对图像进行各种常见操作(格式转换、旋转、缩放、剪切、等)。

    代码示例

    # 旋转某图片并显示 
    from PIL import Image 
    im = Image.open('xxx.jpg') 
    im = im.rotate(90) 
    im.show()

    8.4 处理 PDF

    pyfpdf

    这是 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 目前已经不继续升级维护了。PyPDF2 是 pyPdf 的 fork 并继续增加新功能。

    除了可以提取文件属性,还可以切分/合并文档,加密/解密文档。

    PDFMiner

    可以提取 PDF 文件属性以及每页的文本,支持把内容输出为 HTML 格式。

    8.5 处理 Office 文档

    8.5.1 Word(doc、docx)

    PyWin32

    PyWin32 前面提到过。它可以基于 COM 操作 Office 文档,包括 Word(本地需要安装 Office)。

    8.5.2 Excel(xls、xlsx)

    pyExcelerator

    该库可以支持 Office Excel(97/2000/XP/2003)以及 OpenOffice Calc 的文档。无需依赖外部软件。

    PyWin32

    PyWin32 前面提到过。它可以基于 COM 操作 Office 文档,包括 Excel(本地需要安装 Office)。

    8.5.3 Power Point(ppt、pptx)

    python-pptx

    该库可以用来生成 pptx(Open XML PowerPoint)格式的文档。

    PyWin32

    PyWin32 前面提到过。它可以基于 COM 操作 Office 文档,包括 Excel(本地需要安装 Office)。

    8.6 处理 CHM

    PyCHM

    这是基于 chmlib 的 Python 封装库。可以提取 CHM 文件的属性以及每个页面的内容。

    8.7 处理 RTF

    PyRTF

    这个 Python 库可以用来处理 RTF(富文本格式)文档。

     


     

    9 游戏开发

    PyGame

    跨平台的 Python 第三方库,用来辅助游戏开发的,名气非常大。

    PyOpenGL

    封装 OpenGL 的 Python 第三方库。

    Python-Ogre

    封装 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初学程序示例

    2020-07-21 09:59:50
    这是初学者从无到有写下的python的程序实例,仅供python的初学者参考!
  • Python爬虫入门项目

    万次阅读 多人点赞 2019-09-21 00:02:43
    Python是什么 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。 创始人Guido van Rossum是BBC出品英剧Monty Python’s Flying Circus(中文:蒙提·派森的...

    Python是什么

    Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。

    创始人Guido van Rossum是BBC出品英剧Monty Python’s Flying Circus(中文:蒙提·派森的飞行马戏团)的狂热粉丝,因而将自己创造的这门编程语言命名为Python。

    人生苦短,我用python,翻译自"Life is short, you need Python"

    Python英式发音:/ˈpaɪθən/ ,中文类似‘拍森’。而美式发音:/ˈpaɪθɑːn/,中文类似‘拍赏’。我看麻省理工授课教授读的是‘拍赏’,我觉得国内大多是读‘拍森’吧。

    2017年python排第一也无可争议,比较AI第一语言,在当下人工智能大数据大火的情况下,python无愧第一语言的称号,至于C、C++、java都是万年的老大哥了,在代码量比较方面,小编相信java肯定是完爆其它语言的。

    不过从这一年的编程语言流行趋势看,java依然是传播最多的,比较无论app、web、云计算都离不开,而其相对python而言,学习路径更困难一点,想要转行编程,而且追赶潮流,python已然是最佳语言。

    许多大型网站就是用Python开发的,国内:豆瓣、搜狐、金山、腾讯、盛大、网易、百度、阿里、淘宝、热酷、土豆、新浪、果壳…; 国外:谷歌、NASA、YouTube、Facebook、工业光魔、红帽…

    Python将被纳入高考内容

    浙江省信息技术课程改革方案已经出台,Python确定进入浙江省信息技术高考,从2018年起浙江省信息技术教材编程语言将会从vb更换为Python。其实不止浙江,教育大省北京和山东也确定要把Python编程基础纳入信息技术课程和高考的内容体系,Python语言课程化也将成为孩子学习的一种趋势。尤其山东省最新出版的小学信息技术六年级教材也加入了Python内容,小学生都开始接触Python语言了!!

    再不学习,又要被小学生完爆了。。。

     

    Python入门教程

    Python能做什么

    • 网络爬虫
    • Web应用开发
    • 系统网络运维
    • 科学与数字计算
    • 图形界面开发
    • 网络编程
    • 自然语言处理(NLP)
    • 人工智能
    • 区块链
    • 多不胜举。。。

    Python入门爬虫

    这是我的第一个python项目,在这里与大家分享出来~

    • 需求
      • 我们目前正在开发一款产品其功能大致是:用户收到短信如:购买了电影票或者火车票机票之类的事件。然后app读取短信,解析短信,获取时间地点,然后后台自动建立一个备忘录,在事件开始前1小时提醒用户。
    • 设计
      • 开始我们将解析的功能放在了服务端,但是后来考虑到用户隐私问题。后来将解析功能放到了app端,服务端只负责收集数据,然后将新数据发送给app端。
      • 关于服务端主要是分离出两个功能,一、响应app端请求返回数据。二、爬取数据,存入数据库。
      • 响应请求返回数据使用java来做,而爬取数据存入数据库使用python来做,这样分别使用不同语言来做是因为这两种语言各有优势,java效率比python高些,适合做web端,而爬取数据并不是太追求性能且python语言和大量的库适合做爬虫。
    • 代码
      • 本项目使用python3的版本
      • 获取源码:扫描下方关注微信公众号「裸睡的猪」回复:爬虫入门 获取
         

         

      • 了解这个项目你只需要有简单的python基础,能了解python语法就可以。其实我自己也是python没学完,然后就开始写,遇到问题就百度,边做边学这样才不至于很枯燥,因为python可以做一些很有意思的事情,比如模拟连续登录挣积分,比如我最近在写一个预定模范出行车子的python脚本。推荐看廖雪峰的python入门教程
      • 首先带大家看看我的目录结构,开始我打算是定义一个非常好非常全的规范,后来才发现由于自己不熟悉框架,而是刚入门级别,所以就放弃了。从简而入:
      • 下面咱们按照上图中的顺序,从上往下一个一个文件的讲解init.py包的标识文件,python包就是文件夹,当改文件夹下有一个init.py文件后它就成为一个package,我在这个包中引入一些py供其他py调用。

    init.py

    # -*- coding: UTF-8 -*-  
    
    # import need manager module  
    import MongoUtil  
    import FileUtil  
    import conf_dev  
    import conf_test  
    import scratch_airport_name  
    import scratch_flight_number  
    import scratch_movie_name  
    import scratch_train_number  
    import scratch_train_station  
    import MainUtil
    

    下面两个是配置文件,第一个是开发环境的(windows),第二个是测试环境的(linux),然后再根据不同系统启用不同的配置文件

    conf_dev.py

    # -*- coding: UTF-8 -*-  
    # the configuration file of develop environment  
    
    # path configure  
    data_root_path = 'E:/APK98_GNBJ_SMARTSERVER/Proj-gionee-data/smart/data'  
    
    # mongodb configure  
    user = "cmc"  
    pwd = "123456"  
    server = "localhost"  
    port = "27017"  
    db_name = "smartdb"
    

    conf_test.py

    # -*- coding: UTF-8 -*-  
    # the configuration file of test environment  
    
    #path configure  
    data_root_path = '/data/app/smart/data'  
    
    #mongodb configure  
    user = "smart"  
    pwd = "123456"  
    server = "10.8.0.30"  
    port = "27017"  
    db_name = "smartdb"
    

    下面文件是一个util文件,主要是读取原文件的内容,还有将新内容写入原文件。

    FileUtil.py

    # -*- coding: UTF-8 -*-  
    import conf_dev  
    import conf_test  
    import platform  
    
    
    # configure Multi-confronment  
    # 判断当前系统,并引入相对的配置文件
    platform_os = platform.system()  
    config = conf_dev  
    if (platform_os == 'Linux'):  
        config = conf_test  
    # path  
    data_root_path = config.data_root_path  
    
    
    # load old data  
    def read(resources_file_path, encode='utf-8'):  
        file_path = data_root_path + resources_file_path  
        outputs = []  
        for line in open(file_path, encoding=encode):  
            if not line.startswith("//"):  
                outputs.append(line.strip('\n').split(',')[-1])  
        return outputs  
    
    
    # append new data to file from scratch  
    def append(resources_file_path, data, encode='utf-8'):  
        file_path = data_root_path + resources_file_path  
        with open(file_path, 'a', encoding=encode) as f:  
            f.write(data)  
        f.close
    

    下面这个main方法控制着执行流程,其他的执行方法调用这个main方法

    MainUtil.py

    # -*- coding: UTF-8 -*-  
    
    import sys  
    from datetime import datetime  
    import MongoUtil  
    import FileUtil  
    
    # @param resources_file_path 资源文件的path  
    # @param base_url 爬取的连接  
    # @param scratch_func 爬取的方法  
    def main(resources_file_path, base_url, scratch_func):  
        old_data = FileUtil.read(resources_file_path)   #读取原资源  
        new_data = scratch_func(base_url, old_data)     #爬取新资源  
        if new_data:        #如果新数据不为空  
            date_new_data = "//" + datetime.now().strftime('%Y-%m-%d') + "\n" + "\n".join(new_data) + "\n"      #在新数据前面加上当前日期  
            FileUtil.append(resources_file_path, date_new_data)     #将新数据追加到文件中  
            MongoUtil.insert(resources_file_path, date_new_data)    #将新数据插入到mongodb数据库中  
        else:   #如果新数据为空,则打印日志  
            print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '----', getattr(scratch_func, '__name__'), ": nothing to update ")
    

    将更新的内容插入mongodb中

    MongoUtil.py

    # -*- coding: UTF-8 -*-  
    
    import platform  
    from pymongo import MongoClient  
    from datetime import datetime, timedelta, timezone  
    import conf_dev  
    import conf_test  
    
    # configure Multi-confronment  
    platform_os = platform.system()  
    config = conf_dev  
    if (platform_os == 'Linux'):  
        config = conf_test  
    # mongodb  
    uri = 'mongodb://' + config.user + ':' + config.pwd + '@' + config.server + ':' + config.port + '/' + config.db_name  
    
    
    # 将数据写入mongodb  
    # @author chenmc  
    # @param uri connect to mongodb  
    # @path save mongodb field  
    # @data save mongodb field  
    # @operation save mongodb field default value 'append'  
    # @date 2017/12/07 16:30  
    # 先在mongodb中插入一条自增数据 db.sequence.insert({ "_id" : "version","seq" : 1})  
    
    def insert(path, data, operation='append'):  
        client = MongoClient(uri)  
        resources = client.smartdb.resources  
        sequence = client.smartdb.sequence  
        seq = sequence.find_one({"_id": "version"})["seq"]      #获取自增id  
        sequence.update_one({"_id": "version"}, {"$inc": {"seq": 1}})       #自增id+1  
        post_data = {"_class": "com.gionee.smart.domain.entity.Resources", "version": seq, "path": path,  
                     "content": data, "status": "enable", "operation": operation,  
                     "createtime": datetime.now(timezone(timedelta(hours=8)))}  
        resources.insert(post_data)     #插入数据
    

    项目引入的第三方库,可使用pip install -r requirements.txt下载第三方库

    requirements.txt

    # need to install module# need to install module  
    bs4  
    pymongo  
    requests  
    json
    

    下面真正的执行方法来了,这五个py分别表示爬取五种信息:机场名、航班号、电影名、列车号、列车站。他们的结构都差不多,如下:

    第一部分:定义查找的url;
    第二部分:获取并与旧数据比较,返回新数据;
    第三部分:main方法,执行写入新数据到文件和mongodb中;
    

    scratch_airport_name.py:爬取全国机场

    # -*- coding: UTF-8 -*-  
    import requests  
    import bs4  
    import json  
    import MainUtil  
    
    resources_file_path = '/resources/airplane/airportNameList.ini'  
    scratch_url_old = 'https://data.variflight.com/profiles/profilesapi/search'  
    scratch_url = 'https://data.variflight.com/analytics/codeapi/initialList'  
    get_city_url = 'https://data.variflight.com/profiles/Airports/%s'  
    
    
    #传入查找网页的url和旧数据,然后本方法会比对原数据中是否有新的条目,如果有则不加入,如果没有则重新加入,最后返回新数据
    def scratch_airport_name(scratch_url, old_airports):  
        new_airports = []  
        data = requests.get(scratch_url).text  
        all_airport_json = json.loads(data)['data']  
        for airport_by_word in all_airport_json.values():  
            for airport in airport_by_word:  
                if airport['fn'] not in old_airports:  
                    get_city_uri = get_city_url % airport['id']  
                    data2 = requests.get(get_city_uri).text  
                    soup = bs4.BeautifulSoup(data2, "html.parser")  
                    city = soup.find('span', text="城市").next_sibling.text  
                    new_airports.append(city + ',' + airport['fn'])  
        return new_airports  
    
     #main方法,执行这个py,默认调用main方法,相当于java的main
    if __name__ == '__main__':  
        MainUtil.main(resources_file_path, scratch_url, scratch_airport_name)
    

    scratch_flight_number.py:爬取全国航班号

    #!/usr/bin/python  
    # -*- coding: UTF-8 -*-  
    
    import requests  
    import bs4  
    import MainUtil  
    
    resources_file_path = '/resources/airplane/flightNameList.ini'  
    scratch_url = 'http://www.variflight.com/sitemap.html?AE71649A58c77='  
    
    
    def scratch_flight_number(scratch_url, old_flights):  
        new_flights = []  
        data = requests.get(scratch_url).text  
        soup = bs4.BeautifulSoup(data, "html.parser")  
        a_flights = soup.find('div', class_='list').find_all('a', recursive=False)  
        for flight in a_flights:  
            if flight.text not in old_flights and flight.text != '国内航段列表':  
                new_flights.append(flight.text)  
        return new_flights  
    
    
    if __name__ == '__main__':  
        MainUtil.main(resources_file_path, scratch_url, scratch_flight_number)
    

    scratch_movie_name.py:爬取最近上映的电影

    #!/usr/bin/python  
    # -*- coding: UTF-8 -*-  
    import re  
    import requests  
    import bs4  
    import json  
    import MainUtil  
    
    # 相对路径,也是需要将此路径存入数据库  
    resources_file_path = '/resources/movie/cinemaNameList.ini'  
    scratch_url = 'http://theater.mtime.com/China_Beijing/'  
    
    
    # scratch data with define url  
    def scratch_latest_movies(scratch_url, old_movies):  
        data = requests.get(scratch_url).text  
        soup = bs4.BeautifulSoup(data, "html.parser")  
        new_movies = []  
        new_movies_json = json.loads(  
            soup.find('script', text=re.compile("var hotplaySvList")).text.split("=")[1].replace(";", ""))  
        coming_movies_data = soup.find_all('li', class_='i_wantmovie')  
        # 上映的电影  
        for movie in new_movies_json:  
            move_name = movie['Title']  
            if move_name not in old_movies:  
                new_movies.append(movie['Title'])  
        # 即将上映的电影  
        for coming_movie in coming_movies_data:  
            coming_movie_name = coming_movie.h3.a.text  
            if coming_movie_name not in old_movies and coming_movie_name not in new_movies:  
                new_movies.append(coming_movie_name)  
        return new_movies  
    
    
    if __name__ == '__main__':  
        MainUtil.main(resources_file_path, scratch_url, scratch_latest_movies)
    

    scratch_train_number.py:爬取全国列车号

    #!/usr/bin/python  
    # -*- coding: UTF-8 -*-  
    import requests  
    import bs4  
    import json  
    import MainUtil  
    
    resources_file_path = '/resources/train/trainNameList.ini'  
    scratch_url = 'http://www.59178.com/checi/'  
    
    
    def scratch_train_number(scratch_url, old_trains):  
        new_trains = []  
        resp = requests.get(scratch_url)  
        data = resp.text.encode(resp.encoding).decode('gb2312')  
        soup = bs4.BeautifulSoup(data, "html.parser")  
        a_trains = soup.find('table').find_all('a')  
        for train in a_trains:  
            if train.text not in old_trains and train.text:  
                new_trains.append(train.text)  
        return new_trains  
    
    
    if __name__ == '__main__':  
        MainUtil.main(resources_file_path, scratch_url, scratch_train_number)
    

    scratch_train_station.py:爬取全国列车站

    #!/usr/bin/python  
    # -*- coding: UTF-8 -*-  
    import requests  
    import bs4  
    import random  
    import MainUtil  
    
    resources_file_path = '/resources/train/trainStationNameList.ini'  
    scratch_url = 'http://www.smskb.com/train/'  
    
    
    def scratch_train_station(scratch_url, old_stations):  
        new_stations = []  
        provinces_eng = (  
            "Anhui", "Beijing", "Chongqing", "Fujian", "Gansu", "Guangdong", "Guangxi", "Guizhou", "Hainan", "Hebei",  
            "Heilongjiang", "Henan", "Hubei", "Hunan", "Jiangsu", "Jiangxi", "Jilin", "Liaoning", "Ningxia", "Qinghai",  
            "Shandong", "Shanghai", "Shanxi", "Shanxisheng", "Sichuan", "Tianjin", "Neimenggu", "Xianggang", "Xinjiang",  
            "Xizang",  
            "Yunnan", "Zhejiang")  
        provinces_chi = (  
            "安徽", "北京", "重庆", "福建", "甘肃", "广东", "广西", "贵州", "海南", "河北",  
            "黑龙江", "河南", "湖北", "湖南", "江苏", "江西", "吉林", "辽宁", "宁夏", "青海",  
            "山东", "上海", "陕西", "山西", "四川", "天津", "内蒙古", "香港", "新疆", "西藏",  
            "云南", "浙江")  
        for i in range(0, provinces_eng.__len__(), 1):  
            cur_url = scratch_url + provinces_eng[i] + ".htm"  
            resp = requests.get(cur_url)  
            data = resp.text.encode(resp.encoding).decode('gbk')  
            soup = bs4.BeautifulSoup(data, "html.parser")  
            a_stations = soup.find('left').find('table').find_all('a')  
            for station in a_stations:  
                if station.text not in old_stations:  
                    new_stations.append(provinces_chi[i] + ',' + station.text)  
        return new_stations  
    
    
    if __name__ == '__main__':  
        MainUtil.main(resources_file_path, scratch_url, scratch_train_station)
    

    将项目放到测试服务器(centos7系统)中运行起来,我写了一个crontab,定时调用他们,下面贴出crontab。

    /etc/crontab

    SHELL=/bin/bash  
    PATH=/sbin:/bin:/usr/sbin:/usr/bin  
    MAILTO=root  
    
    # For details see man 4 crontabs  
    
    # Example of job definition:  
    # .---------------- minute (0 - 59)  
    # |  .------------- hour (0 - 23)  
    # |  |  .---------- day of month (1 - 31)  
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...  
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat  
    # |  |  |  |  |  
    # *  *  *  *  * user-name  command to be executed  
      0  0  *  *  * root python3 /data/app/smart/py/scratch_movie_name.py    >> /data/logs/smartpy/out.log 2>&1  
      0  1  *  *  1 root python3 /data/app/smart/py/scratch_train_station.py >> /data/logs/smartpy/out.log 2>&1  
      0  2  *  *  2 root python3 /data/app/smart/py/scratch_train_number.py  >> /data/logs/smartpy/out.log 2>&1  
      0  3  *  *  4 root python3 /data/app/smart/py/scratch_flight_number.py >> /data/logs/smartpy/out.log 2>&1  
      0  4  *  *  5 root python3 /data/app/smart/py/scratch_airport_name.py  >> /data/logs/smartpy/out.log 2>&1
    

    后续

    目前项目已经正常运行了三个多月啦。。。

    有问题反馈

    在阅读与学习中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

    • 微信公众号:裸睡的猪
    • 在下面留言
    • 直接给我私信

    关于此公众号

    • 后期或提供各种软件的免费激活码
    • 推送python,java等编程技术文章和面试技巧
    • 当然你们可以将你们感兴趣的东西直接送给我
    • 谢谢你们真诚的关注,此公众号以后获得的收益将全部通过抽奖的形式送给大家
    • 以后如果博主要创业的话,也会在此公众号中挑选小伙伴哦~
    • 希望大家分享出去,让更多想学习python的朋友看到~

     

     

    展开全文
  • 通过分析github上5000个开源python项目,找出了最常用的库,word文档列举了最常用的前50个,相应代码以网址形式给出,整理非常全面,方便学习。
  • 决策树python sklearn 示例

    千次阅读 2017-10-11 20:47:58
    本文主要是使用python sklearn,完成决策树的demo,以及可视化,最终生成的决策树结果。from sklearn.datasets import load_iris from sklearn import tree from sklearn.tree import export_graphviz import ...

    本文主要是使用python sklearn,完成决策树的demo,以及可视化,最终生成的决策树结果。

    from sklearn.datasets import load_iris
    from sklearn import tree
    from sklearn.tree import export_graphviz
    import subprocess
    
    
    def visualize_tree(tree, feature_name, dot_file):
        """Create tree png using graphviz.
        tree -- scikit-learn DecsisionTree.
        feature_names -- list of feature names.
        dot_file -- dot file name and path
        """
        with open("tree.dot", 'w') as f:
            export_graphviz(tree, out_file=f,
                            feature_names=feature_name)
    
        dt_png = "dt.png"
        command = ["dot", "-Tpng", dot_file, "-o", dt_png]
        try:
            subprocess.check_call(command)
        except Exception as e:
            print e
            exit("Could not run dot, ie graphviz, to "
                 "produce visualization")
    
    
    def iris_demo():
        clf = tree.DecisionTreeClassifier()
        iris = load_iris()
        # iris.data属性150*4,iris.target 类别归一化为了0,1,2(150*1)
        clf = clf.fit(iris.data, iris.target)
        dot_file = 'tree.dot'
        tree.export_graphviz(clf, out_file=dot_file)
        visualize_tree(clf, iris.feature_names, dot_file)
    
        # (graph,) = pydot.graph_from_dot_file('tree.dot')
        # graph.write_png('somefile.png')
    
    
    if __name__ == '__main__':
        iris_demo()
        pass

    数据集


    1. 花的分类的四种属性,150个示例

    这里写图片描述

    2. 花的分类,一共三类对应于0,1,2

    这里写图片描述

    3. 花的四个属性的描述

    这里写图片描述

    最终生成的结果:

    这里写图片描述

    pydot的安装见另一篇bolg

    http://blog.csdn.net/haluoluo211/article/details/78200078

    转载注明出处,并在下面留言!!!

    参考

    http://chrisstrelioff.ws/sandbox/2015/06/08/decision_trees_in_python_with_scikit_learn_and_pandas.html

    http://www.kdnuggets.com/2017/05/simplifying-decision-tree-interpretation-decision-rules-python.html

    展开全文
  • Python3 100例 原题地址: http://www.runoob.com/python/python-100-examples.html git地址: https://github.com/RichardFu123/Python100Cases 原例为Python2.7版本 重写过程中有不少是随意发挥的 ...
  • python gRPC简单示例

    千次阅读 2019-06-13 15:37:27
    Ubuntu18.04安装gRPC protobuf-compiler-grpc安装 sudo apt-get install protobuf-compiler-grpc protobuf-compiler安装 sudo apt-get install protobuf-compiler ...安装 ProtoBuf 相关的 python 依...
  • Mac,VSCode编写Python代码示例

    千次阅读 2019-02-20 13:38:06
    Mac,VSCode编写Python代码示例  之前写Python代码一直用的是Pycharm,后来发现VSCode更加直(jian)观(dan)简(cu)洁(bao) ,于是赶紧在官网下载好VSCode试了一把。 1、新建一个项目文件夹 如下图,文件夹名称为...
  • Python开发 之 Jieba分词示例

    千次阅读 2019-12-05 14:36:33
    文章目录1、唠唠叨叨2、先看一下效果吧3、...之前讲述过关于Jieba分词的内容,最近又有关于这方面的需求,于是做了一个小示例来学习。此示例先获取xlsx文件的语料内容,然后再针对语料进行分词。 回顾一下: Py...
  • 1. 这本书对Python的知识点的描述很详细,而且排版看的很舒服. 2. 几个例题:假装自己从零开始学,将一些有代表性、有意思的例题抽取出来. 3. 还有自己对一部分课后复习题,全部课后上机实践题的解题思路
  • 这是针对于博客vs2017安装和使用教程(详细)的Python项目新建示例 目录 一、安装Python环境 二、启动程序 三、编写小程序 四、运行结果 五、交互式界面演示 一、安装Python环境 1.运行安装程序,点击修改 2....
  • 手把手教你利用爬虫爬网页(Python代码)

    万次阅读 多人点赞 2019-05-14 14:51:58
    本文主要分为两个部分:一部分是网络爬虫的概述,帮助大家详细了解网络爬虫;另一部分是HTTP请求的Python实现,帮助大家了解Python中实现HTTP请求的各种方式,以...
  • python项目目录结构

    千次阅读 2020-02-25 21:54:32
    python 项目目录结构 目录组织方式 假设你的项目名为foo, 我比较建议的最方便快捷目录结构这样就足够了: Foo/ |-- bin/ | |-- foo | |-- foo/ | |-- tests/ | | |-- init.py | | |-- test_main.py | | | |-- init.py...
  • Python项目目录结构

    千次阅读 2018-07-01 14:19:04
    基础目录结构 目录结构说明 data/ scripts/ docs/ examples/ ...“项目目录结构”也属于“可读性和可维护性”的范畴,我们设计一个层次清晰的目录结构,就是为了达到以下两点: 可读性高: 不熟悉这...
  • 通过python,连接到微信账号,收集好友性别、城市、个性签名等公开信息,使用 Python 进行数据统计与分析,得到你专属的朋友圈的分析报告! github地主:https://github.com/KaguraTyan/wechat_analysis_wxpy 1、...
  • Python 类型系统的特点是拥有强大、灵活的类型操作. 维基百科上对此作出的阐述. 而存在一个不争而有趣的事实是, Python 是比Java更加强类型的. Java 对于原生类型和对象区分了类型系统,它让null存在于一个灰色...
  • Python实例大全(基于Python3.7.4)

    万次阅读 多人点赞 2019-12-03 23:02:17
    这是自己写的有关python语言的一篇综合博客。 只作为知识广度和编程技巧学习,不过于追究学习深度,点到即止、会用即可。 主要是基础语句,如三大控制语句(顺序、分支、循环),随机数的生成,数据类型的区分和...
  • python发邮件详解,smtplib和email模块详解

    万次阅读 多人点赞 2018-09-06 18:20:56
    在介绍具体的实现python发邮件的具体操作之前,我觉得有必要介绍下SMTP,更有助于理解python发邮件的实现原理。SMTP协议属于TCP/IP协议簇,即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它...
  • Python学习系列 -- gitHub优秀项目源码

    千次阅读 2018-12-21 12:49:57
    在构建自己的应用程序时,要是能有可以参考阅读的开源项目,简直不好太好了,因为我们知道,开源项目用到的模式或技巧是能奏效的。 今天推荐一个 GitHub 资源帖「Awesome Python Application」,由 Mahmoud Hashem...
1 2 3 4 5 ... 20
收藏数 92,895
精华内容 37,158
热门标签
关键字:

python项目示例