Python語言程序設計課件1第4章 文件與目錄操作_第1頁
Python語言程序設計課件1第4章 文件與目錄操作_第2頁
Python語言程序設計課件1第4章 文件與目錄操作_第3頁
Python語言程序設計課件1第4章 文件與目錄操作_第4頁
Python語言程序設計課件1第4章 文件與目錄操作_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

學習目標了解掌握熟悉Python語言中字節(jié)流與字符流的概念13文件與目錄的操作方法2文件操作流程本章主講內(nèi)容主講內(nèi)容Speechcontent4.2目錄操作4.1文件操作4.3小結文件與目錄操作

在計算機中,用python或其他語言編寫的應用程序在運行過程中要把數(shù)據(jù)永久保存起來,就必須把數(shù)據(jù)以文件形式保存到硬盤中,程序經(jīng)常也要從硬盤讀取文件,這就涉及到應用程序要操作硬件。

有了文件的概念,用戶無需再去考慮操作硬盤的細節(jié),只需要關注操作文件的流程即可完成文件操作。

目錄是存放文件的場所,與文件操作關系密切。主講內(nèi)容Speechcontent4.1.2文件讀寫操作4.1文件操作1.1Python簡介4.1.1文件的打開操作4.1.3文件操作相關方法與With語句文件的打開操作1、文件操作流程操作文件的流程分為3步:第1步

打開文件,得到文件句柄并賦值給一個變量;第2步

通過句柄對文件進行操作,如讀、寫等;第3步

關閉文件。文件的打開操作2、打開文件方法--Open格式:open(file_name[,mode[,buffering],[,encoding]]])。功能:該函數(shù)是打開一個文件,返回一個指向文件的指針(一個文件對象)的文件句柄。說明:name參數(shù)表示需要打開的文件名稱。文件名稱可以是相對路徑,也可以是絕對路徑。Mode用于指定打開模式。buffering用來控制文件的緩沖,默認值為0,表示沒有緩沖,如果設置為1就會有緩沖。如果將buffering的值設為大于1的整數(shù),該整數(shù)就是緩沖區(qū)大小的字節(jié)數(shù)。文件的打開操作2、打開文件方法--OpenEncoding:

指定返回數(shù)據(jù)的編碼格式,一般為utf8或gbk。

注意:如果有緩沖,向文件寫入時,若緩沖區(qū)滿了則自動寫入文件中,否則,需要使用flush()或close()方法,才能把數(shù)據(jù)寫入到文件。文件的打開操作2、打開文件方法--OpenEncoding:

指定返回數(shù)據(jù)的編碼格式,一般為utf8或gbk。

注意:如果有緩沖,向文件寫入時,若緩沖區(qū)滿了則自動寫入文件中,否則,需要使用flush()或close()方法,才能把數(shù)據(jù)寫入到文件。文件的打開操作字符作用‘r'讀模式。默認模式,文件必須存在,不存在則拋出異常。文件指針將會放在文件的開頭?!畐'寫模式。此模式不可讀,文件不存在則創(chuàng)建,存在則清空內(nèi)容再寫。‘a(chǎn)'追加寫模式。此模式不可讀,文件不存在則創(chuàng)建,文件存在則在文件后追加內(nèi)容。

‘b'

二進制模式。對于非文本文件(如圖片文件、視頻文件等),只能使用b模式,“b”表示以字節(jié)的方式操作?!畉'文本模式?!?'表示可以同時讀寫某個文件,如r+讀寫,w+寫讀,a+,寫讀。3、打開模式文件的讀寫操作文件的讀寫操作包括字符流與字節(jié)流的讀寫操作。方法作用read([size])從文件當前位置起讀取size個字符,若無參數(shù)size,則表示讀取至文件結束為止,該函數(shù)返回一個字符串對象。

注意:如果文件大于可用內(nèi)存,不可使用該方法讀取。readline([size])讀取整行內(nèi)容,包括“\n”字符,光標移動到下一行首。如果指定了一個非負數(shù)的參數(shù),則返回指定大小的字符數(shù),包括

"\n"字符。readlines([size])方法用于讀取所有行(直到文件結束符

EOF)并返回一個列表,若給定size>0,返回總和大約為size字節(jié)的行,實際讀取的值可能比size較大,因為需要填充緩沖區(qū)。如果碰到結束符

EOF則返回空字符串。1、字符流的讀操作方法文件的讀寫操作2、字符流的寫操作方法方法作用write([str])參數(shù)str是要寫入文件的字符串,該函數(shù)的返回值是寫入的字符長度。writelines(sequence)參數(shù)是序列,比如列表,它會迭代寫入文件。Writelines方法比write方法效率要高。

注意:在文件關閉或緩沖區(qū)刷新前,字符串內(nèi)容僅存儲在緩沖區(qū)中,此時,在文件中是看不到寫入的內(nèi)容的。文件的讀寫操作3、字符流操作示例示例:已知在D盤的根目錄下有一個文本文件mytext.txt,文件的內(nèi)容如下:獨坐敬亭山

眾鳥高飛盡,孤云獨去閑。相看兩不厭,只有敬亭山。文件的讀寫操作3、字符流操作示例-------------------------------------------------------------------file_handle=open(‘d:\mytext.txt’,“r”)

print(file_handle.read())#輸出文檔的全部內(nèi)容

print(file_handle.read(8))#輸出文檔的前8個字符,回車符也是字符

print(file_handle.readline())#輸出文本的當前行

print(file_handle.readlines())#輸出文本對應的列表,輸出的列表是:['獨坐敬亭山\n','\n','眾鳥高飛盡,\n','孤云獨去閑。\n','相看兩不厭,\n','只有敬亭山。\n’]。-------------------------------------------------------------------文件的讀寫操作3、字符流操作示例下列程序能把mytext文件中的內(nèi)容原樣輸出:-------------------------------------------------------------------------------file_handle=open('d:\mytext.txt',"r")

foriinfile_handle.readlines():

print(i.strip())#print方法輸出時會下起一行,直接打print(i)會輸一個空行,使用strip方法把空行刪除。-------------------------------------------------------------------------------文件的讀寫操作3、字符流操作示例下列程序能把mytext文件中的第3行內(nèi)容輸出。-------------------------------------------------------------------------------file_handle=open('d:\mytext.txt',"r",encoding="GBK")

count=0

foriinfile_handle.readlines():

count+=1

ifcount==3:

print(i.strip())-------------------------------------------------------------------------------文件的讀寫操作3、字符流操作示例示例:-------------------------------------------------------------------------------file_handle=open('d:\mytext.txt',"a")#以追加模式打開文件

context="\n靜夜思\n床前明月光,\n疑是地上霜。\n舉頭望明月,\n低頭思故鄉(xiāng)。\n"

file_handle.write(context)#把字符串以追加的模式寫入文件中file_handle.close()#關閉文件-------------------------------------------------------------------------------運行完程序后,再打開mytext.txt文件,就會看到追加的內(nèi)容。文件的讀寫操作3、字符流操作示例上述示例用writelines(sequence)方法來實現(xiàn)的程序代碼如下:-------------------------------------------------------------------------------file_handle=open('d:\mytext.txt',"a")#以追加模式打開文件

context_list=["\n","靜夜思\n","床前明月光,\n","疑是地上霜。\n","舉頭望明月,\n","低頭思故鄉(xiāng)。\n"]

file_handle.writelines(context_list)#把列表以追加的模式寫入文件中

file_handle.close()#關閉文件-------------------------------------------------------------------------------文件的讀寫操作4、文件操作的主要方法方法作用Close()

關閉文件。Flush()

刷新文件內(nèi)部緩沖,直接把內(nèi)部緩沖區(qū)的數(shù)據(jù)寫入文件,而不是被動地等待輸出緩沖區(qū)寫入。Fileno()

返回一個整型的文件描述符,主要用于如os模塊的read方法等一些底層操作上。next()

返回文件下一行。Tell()

返回文件當前位置Seek(offset[,whence]

設置文件當前位置。offset

?這是文件中讀/寫指針的位置。whence

?可選的,默認為0,表示絕對文件定位,其他值為1,指相對于當前位置進行搜索,2表示相對于文件的末尾進行搜索。readable()

文件是否可讀。該函數(shù)值如果為true,就可以讀取相應文件,如果為false,就不能讀取文件。writable()文件是否可寫。該函數(shù)值如果為true,就可以向相應文件寫數(shù)據(jù),如果為false,就不能向文件寫數(shù)據(jù)。文件的讀寫操作5、字節(jié)流的寫操作方法

對于字節(jié)流文件(一切非字符型文件,包括媒體文件、可執(zhí)行文件、壓縮包等等)則需要使用字節(jié)讀寫模式來進行相應的讀寫操作。與字符讀寫模式相對應,字節(jié)流讀寫模式有四種:rb,wb,ab,xb,分別對應字節(jié)流只讀、字節(jié)流覆寫、字節(jié)流追加與字節(jié)流創(chuàng)寫。with語句

在python的文件操作中,事先需要打開文件獲取文件句柄,才能對文件進行讀寫操作,且最后要求關閉操作的文件。但作為一位編程人員在用Python編寫文件操作程序時經(jīng)常存在2種可能情況,一是忘記關閉文件句柄,二是存在文件讀取數(shù)據(jù)發(fā)生異常,卻沒有進行任何處理。對于這種場景,Python的with語句提供了一種非常方便的處理方式來幫助編程人員解決這些問題。with語句withopen("d:/chenzhen.jpg","rb")asimage_file1,open("d:/chenzhen1.jpg","wb")asimage_file2:

iBytes=image_file1.read()

image_byte_count=image_file2.write(iBytes)

print("寫入的字節(jié)數(shù)量是%d"%(image_byte_count))

圖片文件的讀寫示例本章主講內(nèi)容主講內(nèi)容Speechcontent4.2目錄操作4.1文件操作4.3小結主講內(nèi)容Speechcontent4.2.2目錄操作方法4.2目錄操作1.1Python簡介4.2.1目錄操作中路徑的概念4.2.3os.path模塊4.2.4遍歷文件夾綜合案例目錄

目錄也稱為文件夾。在計算機中,由于文件是保存在目錄中的,因此,對文件操作過程中需要對目錄進行操作。python自帶的os模塊中提供了大量操作目錄的方法,使用起來非常方便。os模塊是Python標準庫中一個用于訪問操作系統(tǒng)功能的模塊,os模塊提供了一種可移植的方法來使用操作系統(tǒng)的功能。使用os模塊中提供的接口,可以實現(xiàn)跨平臺訪問,便于編寫跨平臺的應用。

在使用os模塊的時候,如果使用過程中出現(xiàn)了異常,os模塊就會拋出OSError異常,異常主要是無效的路徑名或文件名,或者給出的路徑名或文件名無法訪問,或者當前使用的系統(tǒng)不支持等原因。目錄操作中路徑的概念

絕對路徑:是指從磁盤的根目錄開始,找到相應目錄或文件的路徑。比如r"d:\python\"就是一個絕對路徑。在Python中,當使用“\”時,最好在路徑前加r,或者使用/或\\。

相對路徑:是指從當前所在目錄開始,找到相應目錄或文件的路徑。在相對路徑中,“.”表示當前目錄,“..”表示上級目錄。比如:“../python/”就是一個相對路徑,表示與文件操作目錄同級的目錄操作目錄。目錄操作方法1.獲取當前目錄位置importos

current_direct=os.getcwd()

print(current_direct,type(current_direct))#輸出如下:D:\test<class'str'>

目錄操作方法2.創(chuàng)建子目錄

創(chuàng)建子目錄的方法是mkdir(path)。括號中的參數(shù)描述的是創(chuàng)建子目錄的路徑,路徑可以是相對路徑,也可以絕對路徑。注意:如果目錄已經(jīng)存在,就會報發(fā)生異常。importos

os.mkdir(r'd:\ddddd’)

os.mkdir(r'd:\ddddd')Traceback(mostrecentcalllast):File"D:/test/service1.py",line2,in<module>os.mkdir(r'd:\ddddd')FileExistsError:[WinError183]當文件已存在時,無法創(chuàng)建該文件。:'d:\\ddddd'

目錄操作方法3.目錄重命名>>>importos>>>os.rename(r'F:\finthon',r'F:\python')目錄操作方法4.獲取目錄下的所有文件importos

list1=os.listdir(r'd:\\’)

print(list1)

3.目錄重命名>>>importos>>>os.rename(r'F:\finthon',r'F:\python')目錄操作方法

5.刪除目錄

刪除目錄的方法是rmdir(path)。需要注意的是rmdir()方法只能刪除空目錄,如果文件夾中包含內(nèi)容,則會產(chǎn)生異常。因此,使用該方法刪除文件夾前需先將文件夾中的文件刪除才能刪除文件夾。如果是遞歸刪除目錄可使用removedirs(path)方法。

6.刪除文件

刪除指定路徑下的文件的方法是remove(path),如果指定的路徑是一個目錄,將拋出OSError異常。目錄操作方法

7.遍歷文件夾

遍歷文件夾使用walk()方法,方法的格式如下:walk(top,topdown=True,onerror=None,followlinks=False)

top:遍歷目錄的路徑;topdown為真,則優(yōu)先遍歷top目錄,否則優(yōu)先遍歷top的子目錄(默認為真);onerror需要一個callable對象,當walk產(chǎn)生異常時,會被調(diào)用。

followlinks為真,則會遍歷目錄下的目錄(默認為假)。4.2.3os.path模塊1.os.path.abspath(path)

作用:返回path規(guī)范化的絕對路徑。示例:>>>importos>>>os.path.abspath('test.csv')'C:\\Users\\chenzhen\\test.csv'4.2.3os.path模塊2.os.path.split(path)

作用:將path分割成目錄和文件名二元組返回。>>>os.path.split('C:\\Users\\chenzhen\\test.csv')('C:\\Users\\chenzhen','test.csv')>>>

4.2.3os.path模塊3.os.path.dirname(path)作用:返回path的目錄。其實就是os.path.split(path)的第一個元素。>>>os.path.dirname('C:\\Users\\chenzhen\\test.csv')'C:\\Users\\chenzhen'4.2.3os.path模塊4.os.path.basename(path)

作用:返回path最后的文件名。如何path以/或\結尾,那么就會返回空值。即os.path.split(path)的第二個元素。>>>os.path.basename('C:\\Users\\chenzhen\\test.csv')'test.csv'4.2.3os.path模塊5.monprefix(list)作用:返回列表中所有path共有的最長的路徑。>>>monprefix(['/home/td','/home/td/aa','/home/td/bb'])'/home/td'4.2.3os.path模塊6.os.path.exists(path)

作用:如果path存在,返回True;如果path不存在,返回False。

>>>os.path.exists('c:\\')True>>>os.path.exists('C:\\Users\\chenzhen\\test.csv')False4.2.3os.path模塊7.os.path.isabs(path)

作用:如果path是絕對路徑,返回True。8.o

溫馨提示

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

評論

0/150

提交評論