《Python程序設計基礎》-課件 李麗 項目八 Python 模塊和包;項目九 Python 文件操作;項目十 綜合性任務實踐_第1頁
《Python程序設計基礎》-課件 李麗 項目八 Python 模塊和包;項目九 Python 文件操作;項目十 綜合性任務實踐_第2頁
《Python程序設計基礎》-課件 李麗 項目八 Python 模塊和包;項目九 Python 文件操作;項目十 綜合性任務實踐_第3頁
《Python程序設計基礎》-課件 李麗 項目八 Python 模塊和包;項目九 Python 文件操作;項目十 綜合性任務實踐_第4頁
《Python程序設計基礎》-課件 李麗 項目八 Python 模塊和包;項目九 Python 文件操作;項目十 綜合性任務實踐_第5頁
已閱讀5頁,還剩80頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

任務1模塊的導入和使用01任務2包的導入和使用02327任務1

模塊的導入和使用3281.?了解模塊的概念。2.?了解模塊化編程的概念。3.?了解模塊化程序設計的優(yōu)越性。4.?熟悉模塊的設計與實現(xiàn)方法。5.?掌握模塊的導入、使用和重新加載方法。6.?掌握模塊中成員的導入方法。7.?能進行模塊及其元素的導入并調(diào)用模塊。任務目標329一、模塊的概念在前面的項目中已經(jīng)使用了很多模塊(如string、time等),通過向程序中導入這些模塊,可以使用很多“現(xiàn)成”的函數(shù)實現(xiàn)需要的功能。模塊就是Python程序。換句話說,任何Python程序都可以作為模塊。經(jīng)過前面的學習,我們已經(jīng)能夠?qū)ython代碼寫到一個文件中,但隨著程序功能越來越復雜,程序體積會不斷變大,為了便于維護,通常會將其分為多個文件(模塊),這樣不僅可以提高代碼的可維護性,還可以提高代碼的可重用性。相關(guān)知識330代碼的可重用性體現(xiàn)在,當編寫好一個模塊后,只要編程過程中需要用到該模塊中的某個功能(由變量、函數(shù)、類實現(xiàn)),無須做重復性的編寫工作,直接在程序中導入該模塊即可使用該功能。前面講了封裝,并且介紹了很多具有封裝特性的結(jié)構(gòu),如諸多容器(列表、元組、字符串、字典等),它們都是對數(shù)據(jù)的封裝;函數(shù)是對Python代碼的封裝;類是對方法和屬性的封裝,也可以說是對函數(shù)和數(shù)據(jù)的封裝。模塊可以理解為對代碼更高級的封裝,即把能夠?qū)崿F(xiàn)某一特定功能的代碼編寫在同一個Python文件中,并將其作為一個獨立的模塊,這樣既可以方便其他程序或腳本導入并使用,又能有效避免函數(shù)名和變量名發(fā)生沖突。331二、模塊化編程1.?模塊化程序設計在進行程序設計時,將系統(tǒng)按照功能劃分為若干部分,每個部分完成特定功能,通過在不同部分間建立聯(lián)系實現(xiàn)互相協(xié)作,完成系統(tǒng)功能的方式稱為模塊化程序設計,這些提供計算功能的程序塊稱為模塊(或函數(shù)模塊),導入并使用這些模塊的程序稱為客戶端程序。使用模塊可以將計算任務分解為大小合理的子任務,并實現(xiàn)代碼的重用。3322.?模塊的API在模塊化程序設計中,客戶端使用模塊所提供的函數(shù)時,無須深入了解函數(shù)的內(nèi)部實現(xiàn)細節(jié)。模塊與客戶端之間的協(xié)定稱為API(applicationprogramminginterface,應用程序接口)。API清楚地描述了模塊中提供的函數(shù)的功能和使用方法。模塊化程序設計的基本原則是,首先設計好API,即定義模塊所提供的函數(shù)或類的功能描述。然后,在此基礎上編寫具體的程序代碼實現(xiàn)模塊中的函數(shù)或類。最后,客戶端可以通過導入模塊,并使用其中的函數(shù)或類,實現(xiàn)所需的功能,而無須關(guān)心其內(nèi)部的具體實現(xiàn)細節(jié)。333通過內(nèi)置函數(shù)help可以查看Python模塊的API。其語法格式如下。import模塊名help(模塊名)在查看模塊的API之前,需要使用import語句導入模塊,也可以使用Python在線幫助查看模塊的API。3343.?模塊的實現(xiàn)“實現(xiàn)”是指實現(xiàn)用于重用的函數(shù)或類的代碼,模塊的實現(xiàn)就是若干實現(xiàn)函數(shù)或類的代碼的集合,保存在擴展名為“.py”的文件中。模塊的實現(xiàn)必須遵循API,可以采用不同算法實現(xiàn)API,這為模塊的改進和版本升級提供了無縫對接,只需要使用遵循API的新的實現(xiàn),所有客戶端程序無須修改即可正常運行。模塊通常是使用Python編寫的程序(“.py”文件)。Python內(nèi)置模塊使用C編寫并已鏈接到Python解釋器中,還可以使用C或C++拓展編寫模塊(編譯為共享庫或DLL文件)。3354.?模塊的客戶端客戶端在使用模塊時,需要遵循模塊所提供的API調(diào)用接口,以導入和調(diào)用模塊中已實現(xiàn)的函數(shù)功能。API的存在使得任何客戶端都可以直接使用模塊,而無須深入檢查模塊內(nèi)部的代碼實現(xiàn)。336三、模塊化程序設計的優(yōu)越性模塊化程序設計是現(xiàn)代程序設計的基本理念之一,具有如下優(yōu)越性。(1)可以編寫大規(guī)模的系統(tǒng)程序:通過把復雜的任務分解為多個子任務,團隊合作開發(fā),以完成大規(guī)模的系統(tǒng)程序。(2)控制程序的復雜度:分解后的子任務的實現(xiàn)模塊代碼規(guī)模一般被控制在數(shù)百行之內(nèi),從而可以控制程序的復雜度,各代碼調(diào)試可以限制在少量的代碼范圍內(nèi)。(3)實現(xiàn)代碼重用:一旦實現(xiàn)了通用模塊(如math、random等),任何客戶端都可以通過導入模塊直接重用代碼,而無須重復實現(xiàn)。(4)增強程序的可維護性:模塊化程序設計可以增強程序的可維護性。337四、模塊的設計與實現(xiàn)1.?模塊設計的一般原則(1)先設計API,再實現(xiàn)模塊。(2)控制模塊的規(guī)模,只為客戶端提供需要的函數(shù)。實現(xiàn)包含大量函數(shù)的模塊會導致模塊的復雜度高。(3)在模塊中編寫測試代碼,并消除全局代碼。(4)使用私有函數(shù)實現(xiàn)不被外部客戶端調(diào)用的模塊函數(shù)。(5)通過文檔提供模塊幫助信息。3382.?API設計API通常由可用函數(shù)的簽名的精確規(guī)范和描述函數(shù)作用的非正式自然語言兩部分組成。API一般使用表格的形式描述模塊中的變量、函數(shù)和類。在編寫一個新模塊時,建議先設計API,然后實現(xiàn)模塊。3393.?創(chuàng)建模塊Python模塊對應于包含Python代碼的源文件(其擴展名為“.py”)。在模塊中除了可以定義變量、函數(shù)和類,還可以包含一般的語句,即主塊語句。當運行該模塊或?qū)朐撃K時,主塊語句將依次執(zhí)行。一般而言,獨立運行的源碼中主要包含主塊語句,以實現(xiàn)響應的功能。作為庫的模塊,主要包含可供調(diào)用的變量、函數(shù)和類,還可以包含用于測試的主塊代碼。注意:主塊代碼只在模塊第一次被導入時執(zhí)行,重復導入時不會多次導入、多次執(zhí)行。3404.?模塊的私有函數(shù)在實現(xiàn)模塊時,有時候需要在模塊中定義僅在模塊中使用的輔助函數(shù)。輔助函數(shù)不提供給客戶端直接調(diào)用,故稱之為私有函數(shù)。按慣例,應使用以下畫線開始的函數(shù)名作為私有函數(shù)名。私有函數(shù)在客戶端不能直接調(diào)用,故API中不包括私有函數(shù)。Python沒有強制不允許調(diào)用私有函數(shù)的機制,但應避免直接調(diào)用私有函數(shù)。3415.?模塊的測試代碼每一個模塊都有一個名稱,通過特殊變量__name__可以獲取模塊的名稱。特別地,當一個模塊被用戶單獨運行時,其__name__的值為'__main__',故可以把模塊源碼文件的測試代碼寫在相應的測試判斷中,以保證只有單獨運行模塊時才會運行測試代碼。3426.?編寫模塊文檔字符串在程序源碼中,可以在特定的地方添加描述性文字,以說明包、模塊、函數(shù)、類、類方法的相關(guān)信息。在函數(shù)的第一個邏輯行的字符串稱為函數(shù)的文檔字符串。函數(shù)的文檔字符串用于提供有關(guān)函數(shù)的幫助信息。文檔字符串一般遵循下列慣例:文檔字符串是一個多行字符串;首行以大寫字母開始,以句號結(jié)尾;第二行是空行;從第三行開始是詳細的描述。343用戶可以使用以下三種方法抽取函數(shù)的文檔字符串幫助信息。(1)使用內(nèi)置函數(shù)help。(2)使用函數(shù)的特殊屬性:函數(shù)名.__doc__。(3)使用第三方自動化工具抽取文檔字符串信息,以形成幫助文檔。3447.?按字節(jié)編譯的“.pyc”文件在導入模塊時,Python解釋器為提高程序的啟動速度,會在與模塊文件同一目錄的__pycache__子目錄下生成“.pyc”文件。“.pyc”文件是經(jīng)過編譯后的字節(jié)碼,這樣下次導入時如果模塊源碼“.py”文件沒有修改(通過比較兩者的時間戳),則直接導入“.pyc”文件,從而提高編程效率。按字節(jié)編譯的“.pyc”文件在導入時由Python解釋器自動完成,無須手動編譯。345五、導入模塊和使用模塊1.?通過import語句導入模塊使用import語句可以導入模塊。其基本形式如下。import模塊名

#導入模塊import模塊1,模塊2,…,模塊n

#導入多個模塊import模塊名as模塊別名

#導入模塊并使用別名其中,模塊名是要導入的模塊的名稱。注意:模塊名區(qū)分大小寫。3462.?通過內(nèi)置函數(shù)__import__導入模塊使用內(nèi)置函數(shù)__import__可以動態(tài)導入模塊。其基本形式如下。_m=__import__(name)

#將模塊name導入_m內(nèi)置函數(shù)__import__有較大的靈活性,如要導入的模塊name可以是計算的結(jié)果字符串,但一般不直接使用。事實上,import語句在內(nèi)部調(diào)用該函數(shù)。3.?使用模塊一般在Python源程序的開始位置導入其他模塊。在導入模塊后,可以使用全限定名稱訪問模塊中定義的成員,即模塊名.函數(shù)名/變量名347六、導入模塊中的成員Python使用from...import語句直接導入模塊中的成員。其基本形式如下。from模塊名import成員名

#導入模塊中的具體成員成員名

#直接調(diào)用如果希望同時導入一個模塊中的多個成員,可以采用以下形式。from模塊名import成員名1,成員名2,…,成員名n如果希望同時導入一個模塊中的所有成員,則可以采用以下形式。from模塊名import*348注意:雖然from...import語句可以簡化代碼,但應避免使用,因為這樣可能導致名稱沖突(如導入多個模塊時,多個模塊中可能存在同一個名稱的函數(shù)),且導致程序的可讀性差(如導入多個模塊時,無法準確確定某個名稱的函數(shù)具體屬于哪一個模塊)。349七、重新加載模塊importlib模塊中的reload函數(shù)用于重新加載之前導入過的模塊,一般用于交互式執(zhí)行Python代碼不退出解釋器的情況,重新加載已更改的Python模塊。需要注意的是,重新加載內(nèi)存中不存在的模塊(未導入過)會導致運行錯誤。350任務2

包的導入和使用3511.?了解包的基本概念。2.?掌握包的創(chuàng)建、導入和使用方法。3.?能正確地從包中導入模塊,實例化函數(shù)并輸出對象地址。任務目標352一、Python的包Python模塊是“.py”文件,而包是文件夾。通常,只要文件夾中包含一個特殊的文件“__init__.py”,Python解釋器就將該文件夾作為包,其中的模塊文件(“.py”文件)屬于包中的模塊。特殊文件“__init__.py”可以為空,也可以包含屬于包的代碼,當導入包或該包中的模塊時執(zhí)行“__init__.py”。包可以包含子包,沒有層次限制。使用包可以有效避免名稱空間沖突。相關(guān)知識353354二、創(chuàng)建包包和模塊組成的層次組織結(jié)構(gòu)對應文件夾和模塊文件。創(chuàng)建包,首先需要在指定目錄中創(chuàng)建對應包名的目錄,然后在該目錄下創(chuàng)建一個特殊文件“__init__.py”,最后在該目錄下創(chuàng)建模塊文件。355三、包的導入和使用在使用import語句導入包中的模塊時需要指定對應的包名。其基本形式如下。import[包名1.[包名2…]].模塊名#導入包中模塊其中,包名是模塊的上層組織包的名稱。注意:包名和模塊名區(qū)分大小寫。在導入包中的模塊后,可以使用全限定名稱訪問包中模塊定義的成員。其基本形式如下。[包名1.[包名2…]].模塊名.函數(shù)名#使用全限定名稱調(diào)用模塊中的成員用戶也可以使用from...import語句直接導入包中模塊的成員。其基本形式如下。from[包名1.[包名2…]].模塊名import成員名同一個包/子包的模塊,可以直接導入相同包/子包的模塊,而不需要指定包名。這是因為同一個包/子包的模塊位于同一個目錄下。當直接導入包時(import包名),將執(zhí)行包目錄下的“__init__.py”(其中創(chuàng)建的名稱有效),但不會導入包目錄下的模塊和子包(子目錄)。356任務1認識文件01任務2使用文件操作函數(shù)完成文本的讀寫02任務3Python不同文件模塊的使用03357任務4基于文件操作的異常處理04任務1認識文件3581.?了解文件路徑的基本概念。2.?了解文件的兩種路徑。3.?了解文件操作基礎。任務目標359一、文件路徑在程序運行時,變量是臨時存儲數(shù)據(jù)的一種方式,一旦程序結(jié)束,這些數(shù)據(jù)將會丟失。如果希望在程序結(jié)束后數(shù)據(jù)仍然保留,就需要將數(shù)據(jù)保存到文件中。Python提供了內(nèi)置的文件對象以及操作文件和目錄的內(nèi)置模塊,通過這些技術(shù),可以輕松地將數(shù)據(jù)存儲到文件中。文件有兩個重要屬性:文件名和路徑。文件名是為每個文件設置的名稱,而路徑則用來指明文件在計算機中的位置。相關(guān)知識360注意:路徑中的“D:\”是指“根文件夾”,它包含了所有其他文件夾。在Windows系統(tǒng)中,根文件夾名為“D:\”,也稱“D:”盤。在OSX和Linux系統(tǒng)中,根文件夾是“/”。本教材的示例使用的是Windows風格的根文件夾,如果在OSX或Linux系統(tǒng)中輸入交互式環(huán)境的例子,應用“/”代替。另外,附加卷(如DVD驅(qū)動器或USB閃存驅(qū)動器)在不同的操作系統(tǒng)中的表示形式也不同。在Windows系統(tǒng)中,書寫路徑時使用反斜杠“\”作為文件夾之間的分隔符。361在交互式環(huán)境中輸入如下代碼。>>>importos>>>os.path.join('demo','exercise')'demo\\exercise'因為此程序是在Windows系統(tǒng)中運行的,所以os.path.join('demo','exercise')返回'demo\\exercise'(注意:反斜杠有兩個,因為每個反斜杠需要由另一個反斜杠字符來轉(zhuǎn)義)。如果在OSX或Linux系統(tǒng)中調(diào)用這個函數(shù),該字符串就會是'demo/exercise'。如果需要創(chuàng)建帶有文件名的文件存儲路徑,同樣可以使用os.path.join函數(shù)。362二、絕對路徑和相對路徑絕對路徑能夠完整地表示出文件的真實位置,并且可以根據(jù)這個路徑層級找到文件。在Windows系統(tǒng)中可以通過“Shift+鼠標右鍵”單擊文件調(diào)出文件的絕對路徑。調(diào)出文件絕對路徑的方法如圖所示,先按住Shift鍵,把光標移至需要獲取絕對路徑的文件圖標處,單擊鼠標右鍵,在彈出的菜單中選擇“復制文件地址”命令,即可將其絕對路徑復制到剪貼板處。363相對路徑即相對于當前工作文件夾,目標文件夾的路徑。以Windows系統(tǒng)為例,“.\”代表當前目錄,“..\”代表上一層目錄,“\”代表根目錄。364調(diào)出文件絕對路徑的方法三、文件操作基礎(1)文件的基本操作:作用于文件本身,屬于系統(tǒng)級操作?!駝?chuàng)建文件:使用內(nèi)置的open函數(shù)創(chuàng)建一個新文件,并返回一個文件對象??梢灾付ㄎ募拿Q、打開模式和編碼等參數(shù)?!駝h除文件:使用os.remove函數(shù)刪除指定的文件?!裥薷臋?quán)限:使用os.chmod函數(shù)修改文件的權(quán)限??梢栽O置文件的所有者、組和其他用戶的權(quán)限?!裰孛募菏褂胦s.rename函數(shù)重命名指定的文件。●移動文件:使用shutil.move函數(shù)移動指定的文件到新的位置。365(2)文件的讀寫操作:最常用的文件操作,作用于文件的內(nèi)容,屬于應用級操作?!褡x取文件:使用文件對象的read()方法讀取文件內(nèi)容??梢砸淮巫x取全部內(nèi)容,也可以按行讀取。●寫入文件:使用文件對象的write()方法寫入內(nèi)容??梢砸淮螌懭胍恍谢蛞淮螌懭攵嘈小F渲?,對文件的系統(tǒng)級操作功能單一,比較容易實現(xiàn),可以借助Python中的專用模塊(os、sys等),并調(diào)用模塊中的指定函數(shù)實現(xiàn)。366文件的應用級操作可以分為以下3步,每一步都需要借助對應的函數(shù)實現(xiàn)。●打開文件:使用open函數(shù),該函數(shù)會返回一個文件對象。●對已打開的文件做讀/寫操作:讀取文件內(nèi)容可以使用read、readline以及readlines函數(shù);向文件中寫入內(nèi)容可以使用write函數(shù)?!耜P(guān)閉文件:完成對文件的讀/寫操作之后,需要關(guān)閉文件,可以使用close函數(shù)。一個文件,必須在打開之后才能對其進行操作,并且在操作結(jié)束之后,還應將其關(guān)閉,操作順序不能打亂。367任務2

使用文件操作函數(shù)完成文本的讀寫3681.?掌握常用文件操作函數(shù)的使用。2.?能運用文件操作函數(shù)進行讀寫等操作。任務目標369一、open函數(shù)在Python中,經(jīng)常需要創(chuàng)建或打開指定的文件,并創(chuàng)建文件對象,這些操作可以通過內(nèi)置的open函數(shù)實現(xiàn)。該函數(shù)的常用語法格式如下。file=open(file_name[,mode='r'[,buffering=-1[,encoding=None]]])在此格式中,用“[]”括起來的部分為可選參數(shù),既可以使用,又可以省略。其中,各個參數(shù)的含義如下?!?le:要創(chuàng)建的文件對象。相關(guān)知識370●?le_name:要創(chuàng)建或打開文件的名稱,若為字符串類型,需要用引號(單引號或雙引號都可以)括起來。注意:如果要打開的文件和當前執(zhí)行的代碼文件位于同一目錄,則直接寫文件名即可;否則,此參數(shù)需要指定打開文件所在的完整路徑。●mode:可選參數(shù),用于指定文件打開模式?!馼u?ering:可選參數(shù),用于指定對文件做讀寫操作時,是否使用緩沖區(qū)。●encoding:手動設定打開文件時所使用的編碼格式,不同平臺的encoding參數(shù)值不同,以Windows系統(tǒng)為例,其默認為CP936(GBK)編碼。371372二、read函數(shù)read函數(shù)用于逐個字節(jié)或字符讀取文件中的內(nèi)容。對于借助open函數(shù),并以可讀模式(包括r、r+、rb、rb+)打開的文件,可以調(diào)用read函數(shù)逐個字節(jié)(或逐個字符)讀取文件中的內(nèi)容。如果文件是以文本模式(非二進制模式)打開的,則read函數(shù)會逐個字符進行讀取;反之,read函數(shù)會逐個字節(jié)進行讀取。373read函數(shù)的基本語法格式如下。file.read([size])其中,?le表示打開的文件對象;size作為一個可選參數(shù),用于指定一次最多可讀取的字符(字節(jié))個數(shù),如果省略,則默認一次性讀取所有內(nèi)容。374三、readline函數(shù)readline函數(shù)用于讀取文件中的一行,包含最后的換行符“\n”。readline函數(shù)的基本語法格式如下。file.readline([size])其中,?le表示打開的文件對象;size表示可選參數(shù),用于指定讀取每一行時,一次最多讀取的字符(字節(jié))數(shù)。和read函數(shù)一樣,readline函數(shù)成功讀取文件數(shù)據(jù)的前提是,使用open函數(shù)指定打開文件的模式必須為可讀模式(包括r、rb、r+、rb+4種)。375四、readlines函數(shù)readlines函數(shù)用于讀取文件中的所有行,它和調(diào)用不指定size參數(shù)的read函數(shù)類似,只不過該函數(shù)返回的是一個字符串列表,其中每個元素為文件中的一行內(nèi)容。和readline函數(shù)一樣,readlines函數(shù)在讀取每一行時,會連同行尾的換行符一起讀取。readlines函數(shù)的基本語法格式如下。file.readlines()其中,?le表示打開的文件對象。與read、readline函數(shù)一樣,readlines函數(shù)要求打開文件的模式必須為可讀模式。376五、write函數(shù)Python中的文件對象提供了write函數(shù),可以向文件中寫入指定的內(nèi)容。write函數(shù)的語法格式如下。file.write(string)其中,?le表示打開的文件對象;string表示要寫入文件的字符串(或字節(jié)串,僅適合寫入二進制文件)。注意:在使用write函數(shù)向文件寫入數(shù)據(jù)時,需保證使用open函數(shù)指定打開文件的模式必須為r+、w、w+、a或a+,否則執(zhí)行write函數(shù)會報io.UnsupportedOperation錯誤。377六、writelines函數(shù)Python的文件對象中不僅提供了write函數(shù),還提供了writelines函數(shù),可以實現(xiàn)將字符串列表寫入文件。注意:寫入函數(shù)只有write和writelines函數(shù),而沒有名為writeline的函數(shù)。writelines函數(shù)的語法格式如下。file.writelines(list)其中,list表示字符串列表(如["小藍","小紅"])。378七、close函數(shù)對于使用open函數(shù)打開的文件,在完成相應的操作之后,需要用close函數(shù)將其手動關(guān)閉,否則程序的運行可能出現(xiàn)問題。close函數(shù)是專門用來關(guān)閉已打開文件的,其語法格式如下。file.close()其中,?le表示打開的文件對象。任務3

Python不同文件模塊的使用3791.?掌握Python不同文件模塊的用法。2.?熟悉Python不同文件模塊的常用函數(shù)。3.?能使用模塊完成文件打開、處理及關(guān)閉等操作。任務目標380一、pickle模塊pickle模塊用于實現(xiàn)Python對象的持久化存儲。Python中有一個序列化過程叫作pickle,它能實現(xiàn)任意對象與文本之間的相互轉(zhuǎn)換,也能實現(xiàn)任意對象與二進制對象之間的相互轉(zhuǎn)換。也就是說,pickle模塊可以實現(xiàn)Python對象的存儲及恢復。pickle模塊是Python的一個標準模塊,安裝Python的同時就已經(jīng)安裝了pickle庫,因此它不需要再單獨安裝,使用import將其導入程序,就可以直接使用。相關(guān)知識381pickle模塊提供了以下4個函數(shù)可供使用。1.?dumps函數(shù)dumps函數(shù)用于將Python中的對象序列化成二進制對象并返回,其語法格式如下。dumps(obj,protocol=None,*,fix_imports=True)各參數(shù)的含義如下?!駉bj:要轉(zhuǎn)換的Python對象?!駊rotocol:pickle的轉(zhuǎn)碼協(xié)議,取值為0、1、2、3、4,其中0、1、2對應Python早期的版本,3和4對應Python3.x版本及之后的版本。在未指定的情況下,其值默認為3。3822.?loads函數(shù)loads函數(shù)用于讀取給定的二進制對象數(shù)據(jù),并將其轉(zhuǎn)換為Python對象,其語法格式如下。loads(data,*,fix_imports=True,encoding='ASCII',errors='strict')其中,data表示要轉(zhuǎn)換的二進制對象。3833.?dump函數(shù)dump函數(shù)用于將Python中的對象序列化成二進制對象,并寫入文件,其語法格式如下。dump(obj,file,protocol=None,*,fix_imports=True)各參數(shù)的含義如下?!駉bj:要序列化的Python對象?!?le:轉(zhuǎn)換到指定的二進制文件中,要求該文件必須是以“wb”打開模式進行操作?!駊rotocol:和dumps函數(shù)中protocol參數(shù)的含義完全相同,即序列化時使用的協(xié)議版本。如果未指定,則使用默認協(xié)議版本。3844.?load函數(shù)load函數(shù)用于讀取指定的序列化數(shù)據(jù)文件,并返回對象,其語法格式如下。load(file,*,fix_imports=True,encoding='ASCII',errors='strict')其中,?le表示要轉(zhuǎn)換的二進制對象文件(必須以“rb”打開模式操作文件)。以上這4個函數(shù)可以分成兩類,其中dumps函數(shù)和loads函數(shù)實現(xiàn)基于內(nèi)存的Python對象與二進制對象互轉(zhuǎn);dump函數(shù)和load函數(shù)實現(xiàn)基于文件的Python對象與二進制對象互轉(zhuǎn)。385386二、fileinput模塊?leinput模塊用于逐行讀取多個文件的數(shù)據(jù)。前面學習了使用open函數(shù)和read函數(shù)或readline函數(shù)、readlines函數(shù)組合來讀取單個文件的數(shù)據(jù),但在某些場景中,可能需要讀取多個文件的數(shù)據(jù),在這種情況下再使用這些組合,顯然就不合適了。對此,Python提供了?leinput模塊,通過該模塊中的input函數(shù),能同時打開指定的多個文件,還能逐個讀取這些文件中的內(nèi)容。387?leinput模塊中input函數(shù)的語法格式如下。fileinput.input(files="filename1,filename2,…",inplace=False,backup='',bufsize=0,mode='r',openhook=None)此函數(shù)會返回一個?leinput對象,它可以理解為將多個指定文件合并之后的文件對象。各參數(shù)的含義如下?!?les:多個文件的路徑列表。●inplace:指定是否將標準輸出的結(jié)果寫回文件,此參數(shù)默認值為False。388●backup:指定備份文件的擴展名。●bufsize:指定緩沖區(qū)的大小,默認為0。●mode:打開文件的模式,默認為r(只讀模式)?!駉penhook:控制文件的打開方式,如編碼格式等。注意:和open函數(shù)不同,input函數(shù)不能指定打開文件的編碼格式,這意味著使用該函數(shù)讀取的所有文件,除非以二進制方式進行讀取,否則該文件的編碼格式必須和當前操作系統(tǒng)默認的編碼格式相同,不然Python解釋器可能提示UnicodeDecodeError錯誤。和open函數(shù)返回單個的文件對象不同,?leinput對象無須調(diào)用類似read、readline、readlines這樣的函數(shù),直接通過for循環(huán)即可按次序讀取多個文件中的數(shù)據(jù)。389?leinput模塊中提供了很多函數(shù),通過調(diào)用這些函數(shù),可以更快地實現(xiàn)想要的功能。fileinput模塊中提供的函數(shù)390三、linecache模塊除了可以借助?leinput模塊實現(xiàn)讀取文件,Python還提供了linecache模塊。linecache模塊用于隨機讀取文件指定行。linecache模塊常用來讀取Python源文件中的代碼,它使用UTF-8編碼格式讀取文件內(nèi)容。因此,使用該模塊讀取的文件,其編碼格式也必須為UTF-8,否則要么讀取出來的數(shù)據(jù)是亂碼,要么直接讀取失?。≒ython解釋器會報SyntaxError異常)。391linecache模塊中常用的函數(shù)見下表。linecache模塊中常用的函數(shù)392四、os.path模塊os.path模塊不僅提供了一些操作路徑字符串的方法,還提供了一些指定文件屬性的方法,os.path模塊常用的函數(shù)見下表。linecache模塊中常用的函數(shù)393linecache模塊中常用的函數(shù)394linecache模塊中常用的函數(shù)任務4

基于文件操作的異常處理3951.?了解異常的概念。2.?熟悉異常的處理方法和異常的傳遞。3.?掌握try...finally語句的使用方法。4.?能正確進行基于文件操作的異常處理。任務目標396一、異常的概念異常就是一個事件,在程序執(zhí)行過程中遇到特殊情況時發(fā)生,幫助定位錯誤,了解程序?qū)嶋H運行狀況。一般情況下,在Python無法按正常流程處理時就會發(fā)生一個異常。異常是Python對象,表示一個錯誤。當Python腳本發(fā)生異常時可以選擇捕獲并處理,若異常超出可處理的范圍且沒有被捕獲,程序?qū)K止,防止造成更大的損失。相關(guān)知識397398二、異常處理1.?使用except不帶任何異常類型捕捉異??梢允褂胻ry...except語句。try...except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息并處理。如果發(fā)生的異常是可以處理的,只需在try語句中捕獲它。其語法格式如下。try:執(zhí)行的代碼except:執(zhí)行的語句,如果在try部分引發(fā)了'name'異常else:如果沒有任何異常執(zhí)行的語句3992.?使用except帶單一異常類型其語法格式如下。try:執(zhí)行的代碼except名稱:執(zhí)行的語句,如果在try部分引發(fā)了'name'異常else:如果沒有任何

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論