<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Python 學習筆記 模塊篇 整理:Jims of [肥肥世家](http://www.ringkee.com) [jims.yang@gmail.com](mailto:jims.yang@gmail.com) Copyright ? 2004,2005,2006 本文遵從GNU 的自由文檔許可證(Free Document License)的條款,歡迎轉 載、修改、散布。 發布時間:2004年7月10日 更新時間:2006年03月01日,增加cjkcodecs模塊。 **Abstract** Python為開發人員提供了豐富的模塊,通過這些模塊,我們就可快速開發出功能強大的程序。本筆記記錄我所接觸或學習過的Python模塊,為想學習Python的朋友提供一個參考。 **Table of Contents** + [1\. Python Imaging Library(PIL)](#id2811889) + [1.1\. 安裝](#id2811915) + [1.1.1\. 下載相關軟件](#id2811923) + [1.1.2\. 開始安裝](#id2809722) + [2\. Pmw(Python megawidgets)Python超級GUI組件集](#id2809818) + [2.1\. 安裝](#id2809843) + [2.2\. 模塊功能演示](#id2810164) + [2.2.1\. ScrolledListBox(滾動列表框)](#id2810171) + [2.2.2\. ScrolledText(滾動文本框)](#id2810195) + [3\. PyXML](#id2810219) + [3.1\. 安裝](#id2810394) + [3.2\. 使用](#id2810431) + [4\. PyGame](#id2810447) + [5\. PyOpenGL](#id2810462) + [6\. NumPy和Numarray](#id2810479) + [7\. MySQLdb](#id2810500) + [7.1\. 安裝](#id2810521) + [7.2\. 模塊功能](#id2810555) + [7.3\. 模塊功能演示](#id2861658) + [8\. Tkinter模塊](#id2862112) + [8.1\. Tkinter簡介](#id2862119) + [9\. PyGTK](#id2862133) + [9.1\. 安裝](#id2862104) + [9.2\. 示例](#id2862080) + [10\. PyQt](#id2861697) + [10.1\. 安裝](#id2861724) + [11\. PyMedia](#id2861855) + [12\. Python-ldap](#id2861875) + [12.1\. 示例](#id2861891) + [13\. ftplib -- FTP protocol client](#id2808494) + [13.1\. 示例](#id2808548) + [14\. Psyco](#id2808607) + [14.1\. 安裝](#id2808658) + [15\. smtplib](#id2808709) + [15.1\. 示例](#id2808717) + [16\. XMPPPY](#id2808780) + [16.1\. 示例](#id2808800) + [16.2\. cjkcodecs](#id2808819) ## Chapter 1\. Python Imaging Library(PIL) PIL(Python圖形庫)為python提供強大的圖形處理的能力,并提供廣泛的圖形文件格式支持,當前最新的版本是1.1.4。可到以下網址[http://www.pythonware.com/products/pil/index.htm](http://www.pythonware.com/products/pil/index.htm)了解PIL的最新動態。該庫能進行圖形格式的轉換、打印和顯示。還能進行一些圖形效果的處理,如圖形的放大、縮小和旋轉等。是Python用戶進行圖象處理的強有力工具。 ## 1.1\. 安裝 ### 1.1.1\. 下載相關軟件 * 到[http://www.pythonware.com/products/pil/index.htm](http://www.pythonware.com/products/pil/index.htm)下載最新版的PIL安裝程序。這里介紹的是在linux下的安裝方法。windows平臺的安裝方法較簡單,只要雙擊安裝程序,就可一步步安裝好了。 * 如果要PIL支持jpeg格式文件,還需安裝jpeg庫文件,可到[http://www.ijg.org](http://www.ijg.org)下載,現時最新的版本是jpegsrc.v6b.tar.gz。 * 如果要PIL支持壓縮功能,還要下載Zlib庫,可到[http://www.gzip.org/zlib/](http://www.gzip.org/zlib/)下載zlib-1.1.4.tar.gz。 ### 1.1.2\. 開始安裝 * 先安裝jpeg庫,輸入以下命令進行安裝: ``` tar xfz jpegsrc.v6b.tar.gz cd jpeg-6b ./configure make make test make install make install-lib ``` * 接著安裝Zlib庫,輸入以下命令進行安裝: ``` tar xfz zlib-1.1.4.tar.gz cd zlib-1.1.4 ./configure make make install ``` * 最后安裝PIL,輸入以下命令進行安裝: ``` tar xfz Imaging-1.1.4.tar.gz cd Imaging-1.1.4 cd libImaging ./configure make cd .. python setup.py build python setup.py install ``` * 測試安裝是否成功,可以在Python的命令行界面輸入以下代碼: ``` >>>import Image >>>im = Image.open("test.jpg") >>>im.show() ``` 如果成功打開test.jpg圖片則安裝成功。注意,在linux中,需要用xv程序來顯示圖片,所以如果沒裝xv,python會提示找不到xv。可到[http://www.trilon.com/xv/downloads.html](http://www.trilon.com/xv/downloads.html)下載xv。 ## Chapter 2\. Pmw(Python megawidgets)Python超級GUI組件集 Pmw是一個在python中利用Tkinter模塊構建的高級GUI組件,每個Pmw都合并了一個或多個Tkinter組件,以實現更有用和更復雜的功能。如,Pmw中的一個ScrolledListBox(滾動列表框)實現了Tkinter的Scrollbar(滾動條)和ListBox(列表框)功能,使我們編程更方便。如果你在Python中開發GUI程序,Pmw是將是你的一個好幫手。 ## 2.1\. 安裝 現在最新的Pmw是1.2版,Pmw的安裝比較簡單,只要到[http://pmw.sourceforge.net/](http://pmw.sourceforge.net/)下載軟件,然后用tar -zxvf命令解壓文件,把解壓出來的Pmw目錄拷到python的模塊目錄下就可以了,如site-packages 目錄。windows平臺使用同一壓縮包,安裝方法也一樣。安裝完成后可登錄進python的命令行界面運行“import Pmw”測試是否安裝成功,如果沒有出錯信息,則安裝成功,可以使用了。 ## 2.2\. 模塊功能演示 ### 2.2.1\. ScrolledListBox(滾動列表框) ``` #ScrolledListBox used to select image. from Tkinter import * import Pmw class ImageSelection( Frame ): """List of available images and an area to display them""" def __init__( self, images ): """Create list of PhotoImages and Label to display them""" Frame.__init__( self ) Pmw.initialise() self.pack( expand = YES, fill = BOTH ) self.master.title( "Select an image" ) self.photos = [] #add PhotoImage object to list photos for item in images: self.photos.append( PhotoImage( file = item ) ) #create scrolled list box with vertical scrollbar self.listBox = Pmw.ScrolledListBox( self, items = images, listbox_height = 3, vscrollmode = "static", selectioncommand = self.switchImage ) self.listBox.pack( side = LEFT, expand = YES, fill = BOTH, padx = 5, pady = 5 ) self.display = Label( self, image = self.photos[0] ) self.display.pack( padx = 5, pady = 5 ) def switchImage ( self ): """Change image in Label to current selection""" #get tuple containing index of selected list item chosenPicture = self.listBox.curselection() #configure label to display selected image if chosenPicture: choice = int( chosenPicture[0] ) self.display.config( image = self.photos[ choice ] ) def main(): images = [ "c:\python23\logo.gif", "c:\python23\china.gif", "c:\python23\canada.gif", "c:\python23\logo.gif" ] ImageSelection(images).mainloop() if __name__ == "__main__": main() ``` ![](images/ScrolledListBox.png) ### 2.2.2\. ScrolledText(滾動文本框) ``` #Copying selected text from one text area to another. from Tkinter import * import Pmw class CopyTextWindow( Frame ): """Demonatrate ScrolledText""" def __init__( self ): """Create two ScrolledText and a Button""" Frame.__init__( self ) Pmw.initialise() self.pack( expand = YES, fill = BOTH ) self.master.title( "ScrolledText Demo" ) #create scrolled text box with word wrap enable self.text1 = Pmw.ScrolledText( self, text_width = 25, text_height = 12, text_wrap = WORD, hscrollmode = "static", vscrollmode = "static" ) self.text1.pack( side = LEFT, expand = YES, fill = BOTH, padx = 5, pady = 5 ) self.copyButton = Button( self, text = "Copy >>>", command = self.copyText ) self.copyButton.pack( side = LEFT, padx = 5, pady = 5 ) #create uneditable scrolled text box self.text2 = Pmw.ScrolledText( self, text_state = DISABLED, text_width = 25, text_height = 12, text_wrap = WORD, hscrollmode = "static", vscrollmode = "static" ) self.text2.pack( side = LEFT, expand = YES, fill = BOTH, padx = 5, pady = 5 ) def copyText( self ): """set the text in the second ScrolledText""" self.text2.settext( self.text1.get( SEL_FIRST,SEL_LAST ) ) def main(): CopyTextWindow().mainloop() if __name__ == "__main__": main() ``` ![](images/ScrolledText.png) ## Chapter 3\. PyXML PyXML是一套用Python解析和處理XML文檔的工具包,包中的4DOM是完全相容于W3C DOM規范的。它包含以下內容: * xmlproc: 一個符合規范的XML解析器。 * Expat: 一個快速的,非驗證的XML解析器。 * sgmlop: a C helper module that can speed-up xmllib.py and sgmllib.py by a factor of 5. * PySAX: SAX 1 and SAX2 libraries with drivers for most of the parsers. * 4DOM: A fully compliant DOM Level 2 implementation * javadom: An adapter from Java DOM implementations to the standard Python DOM binding. * pulldom: a DOM implementation that supports lazy instantiation of nodes. * marshal: a module with several options for serializing Python objects to XML, including WDDX and XML-RPC. ## 3.1\. 安裝 到[http://sourceforge.net/project/showfiles.php group_id=6473](http://sourceforge.net/project/showfiles.php group_id=6473)下載最新版的模塊,現在是PyXML-0.8.3。安裝PyXML需要有python2.0以上及以上的版本。下載完成后用tar解壓縮生成PyXML-0.8.3目錄,進入該目錄并運行python setup.py build和python setup.py install完成安裝。測試方法是進入命令行交互界面運行“import xml.dom.ext"命令,如果沒提示模塊出錯則說明安裝成功。PyXML提供windows平臺的安裝包,下載后雙擊運行就可以了。 ## 3.2\. 使用 由于該模塊的內容較多,所以該模塊的詳細使用將我在“PyXML學習筆記”中單獨討論。 ## Chapter 4\. PyGame PyGame是一組用于多媒體開發和游戲軟件開發的模塊。 ## Chapter 5\. PyOpenGL PyOpenGL模塊封裝了“OpenGL應用程序編程接口”,通過該模塊python程序員可在程序中集成2D和3D的圖形。 ## Chapter 6\. NumPy和Numarray NumPy是Python的一個擴展庫,主要用于處理任意維數的固定類型數組,它的低層代碼使用C來編寫,所以速度的優勢很明顯。Numarray是NumPy的一個改進版,用于取代NumPy。 ## Chapter 7\. MySQLdb MySQLdb模塊用于連接MySQL數據庫。源碼位于[http://sourceforge.net/projects/mysql-python](http://sourceforge.net/projects/mysql-python),這里還有用于zope的ZMySQLDA模塊,通過它就可在zope中連接mysql數據庫。 ## 7.1\. 安裝 安裝的方法在解壓目錄的README文件中有詳細說明。不難,這里就不詳細講了。要注意的一點是,如果你的mysql不是安裝在默認的路徑,而是安裝在/usr/local/mysql這樣的路徑的話,libmysqlclient.so.12這個動態庫python可能會找不到,造成import出錯,解決方法是在/usr/lib下做一個符號連接,ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.12 libmysqlclient.so.12。最后在python中用import MySQLdb測試,如果沒有出錯信息就說明安裝成功,可以連接mysql數據庫了。 ## 7.2\. 模塊功能 * connect()方法用于連接數據庫,返回一個數據庫連接對象。如果要連接一個位于host.remote.com服務器上名為fourm的MySQL數據庫,連接串可以這樣寫: ``` db = MySQLdb.connect(host="remote.com",user="user",passwd="xxx",db="fourm" ) ``` connect()的參數列表如下: * host,連接的數據庫服務器主機名,默認為本地主機(localhost)。 * user,連接數據庫的用戶名,默認為當前用戶。 * passwd,連接密碼,沒有默認值。 * db,連接的數據庫名,沒有默認值。 * conv,將文字映射到Python類型的字典。默認為MySQLdb.converters.conversions * cursorclass,cursor()使用的種類,默認值為MySQLdb.cursors.Cursor。 * compress,啟用協議壓縮功能。 * named_pipe,在windows中,與一個命名管道相連接。 * init_command,一旦連接建立,就為數據庫服務器指定一條語句來運行。 * read_default_file,使用指定的MySQL配置文件。 * read_default_group,讀取的默認組。 * unix_socket,在unix中,連接使用的套接字,默認使用TCP。 * port,指定數據庫服務器的連接端口,默認是3306。 * 連接對象的db.close()方法可關閉數據庫連接,并釋放相關資源。 * 連接對象的db.cursor([cursorClass])方法返回一個指針對象,用于訪問和操作數據庫中的數據。 * 連接對象的db.begin()方法用于開始一個事務,如果數據庫的AUTOCOMMIT已經開啟就關閉它,直到事務調用commit()和rollback()結束。 * 連接對象的db.commit()和db.rollback()方法分別表示事務提交和回退。 * 指針對象的cursor.close()方法關閉指針并釋放相關資源。 * 指針對象的cursor.execute(query[,parameters])方法執行數據庫查詢。 * 指針對象的cursor.fetchall()可取出指針結果集中的所有行,返回的結果集一個元組(tuples)。 * 指針對象的cursor.fetchmany([size=cursor.arraysize])從查詢結果集中取出多行,我們可利用可選的參數指定取出的行數。 * 指針對象的cursor.fetchone()從查詢結果集中返回下一行。 * 指針對象的cursor.arraysize屬性指定由cursor.fetchmany()方法返回行的數目,影響fetchall()的性能,默認值為1。 * 指針對象的cursor.rowcount屬性指出上次查詢或更新所發生行數。-1表示還沒開始查詢或沒有查詢到數據。 ## 7.3\. 模塊功能演示 ``` #!/usr/bin/python import MySQLdb try: connection = MySQLdb.connect(user="user",passwd="password",host="xxx",db="test") except: print "Could not connect to MySQL server." exit( 0 ) try: cursor = connection.cursor() cursor.execute( "SELECT note_id,note_detail FROM note where note_id = 1" ) print "Rows selected:", cursor.rowcount for row in cursor.fetchall(): print "note : ", row[0], row[1] cursor.close() ``` ## Chapter 8\. Tkinter模塊 ## 8.1\. Tkinter簡介 Tkinter是Python默認的圖形界面接口,Tkinter是一個和Tk接口的Python模塊,Tkinter庫提供了對Tk API的接口,它屬于Tcl/Tk的GUI工具組。Tcl/Tk是由John Ousterhout發展的書寫和圖形設備。Tcl(工具命令語言)是個宏語言,用于簡化shell下復雜程序的開發,Tk工具包是和Tcl一起開發的,目的是為了簡化用戶接口的設計過程。Tk工具包由許多不同的小部件,如一個按鈕、一個滾動條等。通過Tk提供的這些小部件,我們就可快速地進行GUI開發。Perl、Scheme等語言也利用Tk庫進行GUI開發。Tkinter是跨平臺,在各種平臺下都能使用。 ## Chapter 9\. PyGTK PyGTK是一個用于python GUI程序開發的GTK+庫,當前版本的PyGTK需要GTK+ 2.0以上版本支持和Python 2.2以上版本支持才能運行。 ## 9.1\. 安裝 如果是在Debian系統中,則安裝python2.3-gtk2軟件包即可。如果要從源碼安裝,可到[http://www.pygtk.org](http://www.pygtk.org)下載最新的軟件包。安裝方法也很簡單,和其它開源軟件差不多,通過configure、make和make install三步操作就可完成。具體操作你可參考源碼目錄下的README和INSTALL文檔,里面有詳細的安裝說明。注意,要成功安裝PyGTK,要有相應版本的GTK+和Python支持。在源碼目錄下有一個examples目錄,這是一個寶貴的資源,里面有很多有用的PyGTK示例代碼,對我們學習PyGTK很有幫助。 ## 9.2\. 示例 下面是一個PyGTK的示例,演示了PyGTK的基本概念。 ``` #!/usr/bin/env python #-*- encoding:utf-8 -*- import pygtk pygtk.require('2.0') import gtk class base: #destroy信號的回調函數 def destroy(self,widget,data=None): gtk.main_quit() #clicked信號的回調函數 def hello(self,widget,data): print 'hello ' + data + ' this is a button clicked() test' #delete_event事件的回調函數 def delete_event(self, widget, event, data=None): print "delete event occurred" #如果delete_event事件返回假,則會觸發destroy信號,從而關閉窗口。 #如果返回真,則不會關閉窗口。這個特性在當我們需要一個確認是否退出的選擇對話框時是很有用。 return gtk.FALSE def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) #設置窗口的delete_event信號觸發delete_event函數 self.window.connect("delete_event", self.delete_event) #設置窗口的destroy信號觸發destroy函數 handler1 = self.window.connect("destroy",self.destroy) print "handler1 is:%d" % handler1 self.window.set_title('PyGTK 測試 window') self.window.set_default_size(200,200) self.window.set_border_width(100) #控制窗口出現的位置 self.window.set_position(gtk.WIN_POS_CENTER) #生成按鈕實例 self.button1 = gtk.Button() self.button2 = gtk.Button() self.button1.set_label('label1') self.button2.set_label('label2') #設置按鈕的clicked信號觸發hello函數,并傳遞‘pyGTK’字符串參數給hello函數 handler2 = self.button1.connect("clicked",self.hello,"pyGTK") print "handler2 is:%d" % handler2 #設置按鈕的clicked信號觸發self..window對象的gtk.Widget.destroy方法 self.button1.connect_object("clicked", gtk.Widget.destroy, self.window) #取消handler2的功能 # self.button.disconnect(handler2) #設置一個不可見的橫向的欄位self.box1 self.box1 = gtk.HBox(gtk.FALSE, 0) #把box1放到窗口中 self.window.add(self.box1) #把button1部件放到box1中 self.box1.pack_start(self.button1,gtk.TRUE,gtk.TRUE,0) self.button1.show() #把button2部件放到button1部件之后 self.box1.pack_start(self.button2,gtk.TRUE,gtk.TRUE,0) self.button2.show() self.box1.show() self.window.show() def main(self): gtk.main() print __name__ if __name__ == "__main__": base = base() base.main() ``` 有關PyGTK的詳細介紹請參考我整理的“PyGTK學習筆記”。 ## Chapter 10\. PyQt PyQt是一套用于python的Qt開發庫,由一系列的模塊組成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300個類和超過5750個的函數和方法。 PyQt還支持一個叫qtext的模塊,它包含一個QScintilla庫。該庫是Scintillar編輯器類的Qt接口。 ## 10.1\. 安裝 到[http://www.riverbankcomputing.co.uk/pyqt/download.php](http://www.riverbankcomputing.co.uk/pyqt/download.php)下載最新的版本。安裝PyQt需要先安裝SIP,到以[這里](http://www.riverbankcomputing.co.uk/sip/download.php)下載。[SIP](http://www.riverbankcomputing.co.uk/sip/index.php)是一個把C\C++庫轉換成Python模塊的工具。 * 安裝SIP ``` % tar -zxvf sip-4.1.1.tar.gz % cd sip-4.1.1 % python configure.py -l qt # -l qt 選項指定qt版本 % make % make install ``` * 安裝PyQt ``` % tar -zxvf PyQt-x11-gpl-3.13.tar.gz % cd PyQt-x11-gpl-3.13 % python configure.py % make % make install ``` ## Chapter 11\. PyMedia PyMedia模塊是一個用于多媒體操作的python模塊。它提供了豐富而簡單的接口用于多媒體處理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平臺下使用。 ## Chapter 12\. Python-ldap Python-ldap模塊提供一組面向對象的API,可方便地在python中訪問ldap目錄服務,它基于OpenLDAP2.x。 ## 12.1\. 示例 * 以下示例在python-ldap網站上有列出,這里作一下簡要說明: ``` #!/usr/bin/python #-*- coding:utf-8 -*- #設置源碼文件編碼為utf-8 import ldap try: conn = ldap.open("server_name") #server_name為ldap服務器名 conn.protocol_version = ldap.VERSION3 #設置ldap協議版本 username = "cn=admin,dc=company,dc=com" #用戶名 password = "123" #訪問密碼 conn.simple_bind(username,password) #連接 except ldap.LDAPError, e: #捕獲出錯信息 print e baseDN = "dc=employees,dc=company,dc=com" #設置目錄的搜索路徑起點 searchScope = ldap.SCOPE_SUBTREE #設置可搜索子路徑 retrieveAttributes = None #None表示搜索所有屬性,['cn']表示只搜索cn屬性 searchFilter = "cn=test" #設置過濾屬性,這里只顯示cn=test的信息 try: ldap_result_id = conn.search(baseDN,searchScope,searchFilter,retrieveAttributes) #調用search方法返回結果id result_set = [] while 1: result_type, result_data = conn.result(ldap_result_id, 0) #通過結果id返回信息 if result_data == []: break else: if result_type == ldap.RES_SEARCH_ENTRY: result_set.append(result_data) print result_set[0][0][1]['o'][0] #result_set是一個復合列表,需通過索引返回組織單元(o)信息 except ldap.LDAPError, e: print e ``` 這里采用的是非同步方式,同步方式的連接和搜索命令后有“_s”后綴,如search_s。非同步方式需通過一個結果id來訪問目錄服務信息。 * 下面是一個修改目錄信息的示例: ``` #!/usr/bin/python # -*- coding:utf-8 -*- import ldap try: conn = ldap.open("server_name") conn.protocol_version = ldap.VERSION3 username = "cn=admin,dc=company,dc=com" password = "123" conn.simple_bind_s(username,password) except ldap.LDAPError, e: print e try: dn = "cn=test,dc=employees,dc=company,dc=com" conn.modify_s(dn,[(ldap.MOD_ADD,'mail','test@163.com')]) #增加一個mail屬性 except ldap.LDAPError, e: print e ``` ldap.MOD_ADD表示增加屬性,ldap.MOD_DELETE表示刪除屬性,ldap.MOD_REPLACE表示修改屬性。 * 下面是一個增加目錄項的示例: ``` #!/usr/bin/python # -*- coding:utf-8 -*- import ldap,ldap.modlist #ldap.modlist是ldap的子模塊,用于格式化目錄服務的數據項 try: conn = ldap.open("server_name") conn.protocol_version = ldap.VERSION3 username = "cn=admin,dc=company,dc=com" password = "123" conn.simple_bind_s(username,password) except ldap.LDAPError, e: print e try: dn = "cn=test,dc=card,dc=company,dc=com" modlist = ldap.modlist.addModlist({ #格式化目錄項,除對象類型要求必填項外, 'cn': ['test'], #其它項可自由增減 'objectClass': ['top', 'person', 'organizationalPerson', 'inetOrgPerson'], 'o': ['\xe5\xb9\xbf\xe5\xb7\x9e'], #這些為utf-8編碼的中文 'street': ['\xe5\xb9\xbf\xe5\xb7\x9e'], 'sn': ['tester'], 'mail': ['test@163.com', 'test@21cn.com'], 'homePhone': ['xxxxxxxx'], 'uid': ['test'] }) # print modlist #顯示格式化數據項,格式化后是一個元組列表 conn.add_s(dn,modlist) #調用add_s方法添加目錄項 except ldap.LDAPError, e: print e ``` 其實我們也可按格式化后元組列表的形式把目錄項直接寫到add_s()里,省卻轉換的步驟。 * 下面是一個刪除目錄項的示例: ``` #!/usr/bin/python # -*- coding:utf-8 -*- import ldap try: conn = ldap.open("server_name") conn.protocol_version = ldap.VERSION3 username = "cn=admin,dc=company,dc=com" password = "123" conn.simple_bind_s(username,password) except ldap.LDAPError, e: print e try: dn = "cn=sale,dc=company,dc=com" conn.delete_s(dn) except ldap.LDAPError, e: print e ``` ## Chapter 13\. ftplib -- FTP protocol client ftplib模塊定義了FTP類和一些方法,用以進行客戶端的ftp編程。我們可用python編寫一個自已的ftp客戶端程序,用于下載文件或鏡像站點。如果想了解ftp協議的詳細內容,請參考[RFC959](http://www.faqs.org/rfcs/rfc959.html)。 ## 13.1\. 示例 該模塊是python的通用模塊,所以默認應該已安裝。ftplib模塊使用很簡單,暫時只有一個FTP類和十幾個函數。下面用一個交互方式演示一下ftplib的主要功能。 ``` >>> from ftplib import FTP >>> ftp=FTP('ftp.python.org') >>> ftp.login() '230 Login successful.' >>> ftp.dir() drwxrwxr-x 7 1004 1004 512 Aug 13 01:35 pub >>> ftp.cwd('pub') '250 Directory successfully changed.' >>> ftp.dir() drwxrwxr-x 5 1000 1004 1024 Dec 24 11:04 docs.python.org drwxrwsr-x 2 1002 1004 512 Oct 12 2001 jython lrwx------ 1 0 1003 25 Aug 03 2001 python -> www.python.org/ftp/python drwxr-xr-x 9 1018 1004 512 Feb 02 03:44 pyvault drwxr-xr-x 2 1005 1004 512 May 06 2003 tmp drwxrwsr-x 59 1004 1004 3072 Feb 03 14:58 www.python.org >>> ftp.quit() '221 Goodbye.' ``` 下面一個下載文件的示例 ``` #!/usr/bin/env python #author:Jims of www.ringkee.com #create date: 2005/02/05 #description: Using ftplib module download a file from a ftp server. from ftplib import FTP ftp=FTP() ftp.set_debuglevel(2) #打開調試級別2,顯示詳細信息 ftp.connect('ftp_server','port') #連接 ftp.login('username','password') #登錄,如果匿名登錄則用空串代替即可 print ftp.getwelcome() #顯示ftp服務器歡迎信息 ftp.cwd('xxx/xxx/') #選擇操作目錄 bufsize = 1024 #設置緩沖塊大小 filename='dog.jpg' file_handler = open(filename,'wb').write #以寫模式在本地打開文件 ftp.retrbinary('RETR dog.jpg',file_handler,bufsize) #接收服務器上文件并寫入本地文件 ftp.set_debuglevel(0) #關閉調試 ftp.quit() #退出ftp服務器 ``` 下面一個上傳文件的示例,要成功運行該腳本,需在ftp服務器上有上傳文件的權限。 ``` #!/usr/bin/env python #author:Jims of www.ringkee.com #create date: 2005/02/05 #description: Using ftplib module upload a file to a ftp server. from ftplib import FTP ftp=FTP() ftp.set_debuglevel(2) ftp.connect('ftp_server','port') ftp.login('username','password') print ftp.getwelcome() ftp.cwd('xxx/xxx/') bufsize = 1024 filename='dog.jpg' file_handler = open(filename,'rb') ftp.storbinary('STOR dog.jpg',file_handler,bufsize) #上傳文件 ftp.set_debuglevel(0) file_handler.close() #關閉文件 ftp.quit() ``` 是不是很簡單,其它功能可查詢python的官方網站,網址是[http://docs.python.org/lib/module-ftplib.html](http://docs.python.org/lib/module-ftplib.html)。 ## Chapter 14\. Psyco Psyco是一個Python代碼加速度器,可使Python代碼的執行速度提高到與編譯語言一樣的水平。 ## 14.1\. 安裝 安裝Psyco很簡單,它有兩種安裝方式,一種是源碼方式,一種是二進制碼方式: * 如果用源碼方式安裝,你需在源碼的目錄中調用python setup.py install命令編譯生成psyco子目錄,再把該子目錄整個拷貝到python的site-packages目錄下。 * 如果用二進制碼方式安裝,按[這個網址](http://psyco.sourceforge.net/psycoguide/binaries.html)列表中的python與psyco版本對應表下載合適的二進制文件,解壓后會生成一個psyco-1.x的目錄,把該目錄下的psyco目錄整個拷貝到python的site-packages目錄下即可。 ## Chapter 15\. smtplib ## 15.1\. 示例 smtplib模塊以發送電子郵件。下面是一個示例,可發送附件。 ``` #!/usr/bin/python #-*- encoding:utf-8 -*- import smtplib,mimetypes from email import Encoders from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart msg = MIMEMultipart() #創建可包含附件的MIME對象 msg['Subject'] = 'this is title' msg['From'] = 'yjnet@21cn.com' msg['To'] = 'yjnet@21cn.com' txt = MIMEText('這是郵件正文的中文測試。',_charset='utf-8') msg.attach(txt) filename = 'jdk15.tar' #附件名 fp = open(filename,'rb') ctype,encoding = mimetypes.guess_type(filename) if ctype is None or encoding is not None: ctype = 'application/octet-stream' maintype,subtype = ctype.split('/',1) m = MIMEBase(maintype,subtype) m.set_payload(fp.read()) fp.close() Encoders.encode_base64(m) #把附件編碼 m.add_header('Content-disposition','attachment',filename=filename) #修改郵件頭 msg.attach(m) #添加附件 s = smtplib.SMTP('smtp.21cn.com') #連接郵件服務器 s.login('yjnet','****') #登錄郵件服務器 s.sendmail('yjnet@21cn.com','yjnet@21cn.com',msg.as_string()) #發送郵件 s.close() ``` ## Chapter 16\. XMPPPY Jabber服務器采用開發的XMPP協議,Google Talk也是采用XMPP協議的IM系統 。在Python中有一個xmpppy模塊支持該協議。也就是說,我們可以通過該模塊與Jabber服務器通信,是不是很Cool。 ## 16.1\. 示例 下面是一個簡單的示例,可使大家對該模塊有一個大概的了解。 ``` #導入xmpppy模塊 >>> import xmpp #建立Client實例,debian是我的jabber服務器名,jabber服務器的安裝可參考我的Debian學習筆記。 >>> c=xmpp.Client('debian',debug=[]) #連接 >>> c.connect() 'tcp' #驗證 >>> c.auth('yangjing','12345') 'old_auth' #登入 >>> c.sendInitPresence() #向ringkee@debian >>> c.send(xmpp.protocol.Message('ringkee@debian ','test message from yangjing')) '20' #下面測試信息接收功能,如果沒有信息,則pending_data()為空 >>>c.TCPsocket.pending_data() [] #如果有信息,則pending_data()不為空 >>> c.TCPsocket.pending_data() [<socket._socketobject object at 0xb795beb4>] #接收信息 >>> c.TCPsocket.receive() "<message type='chat' to='yangjing@debian/xmpppy' from='ringkee@debian/Gaim'><x xmlns='jabber:x:event'><composing/></x><body>message from ringkee@debian</body><html xmlns='http://jabber.org/protocol/xhtml-im'><body xmlns='http://www.w3.org/1999/xhtml'>message from <a HREF='mailto:ringkee@debian'>ringkee@debian</a></body></html></message>" #登出 >>> c.disconnect() ``` ## 16.2\. cjkcodecs 在python2.4版以前,python不能處理cjk(中國,日本和韓國)的編碼,所以就有了cjkcodecs模塊。安裝該模塊后Python就能處理cjk字符了。下載網址:[http://cjkpython.i18n.org/](http://cjkpython.i18n.org/)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看