




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
文件操作為了長期保存數(shù)據(jù)以便重復使用、修改和共享,必須將數(shù)據(jù)以文件的形式存儲到外部存儲介質(如磁盤、U盤、光盤或云盤、網盤、快盤等)中。文件操作在各類應用軟件的開發(fā)中均占有重要的地位:管理信息系統(tǒng)是使用數(shù)據(jù)庫來存儲數(shù)據(jù)的,而數(shù)據(jù)庫最終還是要以文件的形式存儲到硬盤或其他存儲介質上。應用程序的配置信息往往也是使用文件來存儲的,圖形、圖像、音頻、視頻、可執(zhí)行文件等等也都是以文件的形式存儲在磁盤上的。文件操作按文件中數(shù)據(jù)的組織形式把文件分為文本文件和二進制文件兩類。文本文件:文本文件存儲的是常規(guī)字符串,由若干文本行組成,通常每行以換行符'\n'結尾。常規(guī)字符串是指記事本或其他文本編輯器能正常顯示、編輯并且人類能夠直接閱讀和理解的字符串,如英文字母、漢字、數(shù)字字符串。文本文件可以使用字處理軟件如gedit、記事本進行編輯。二進制文件:二進制文件把對象內容以字節(jié)串(bytes)進行存儲,無法用記事本或其他普通字處理軟件直接進行編輯,通常也無法被人類直接閱讀和理解,需要使用專門的軟件進行解碼后讀取、顯示、修改或執(zhí)行。常見的如圖形圖像文件、音視頻文件、可執(zhí)行文件、資源文件、各種數(shù)據(jù)庫文件、各類office文檔等都屬于二進制文件。8.1文件基本操作文件內容操作三部曲:打開、讀寫、關閉open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)文件名指定了被打開的文件名稱。打開模式指定了打開文件后的處理方式。緩沖區(qū)指定了讀寫文件的緩存模式。0表示不緩存,1表示緩存,如大于1則表示緩沖區(qū)的大小。默認值是緩存模式。參數(shù)encoding指定對文本進行編碼和解碼的方式,只適用于文本模式,可以使用Python支持的任何格式,如GBK、utf8、CP936等等。如果執(zhí)行正常,open()函數(shù)返回1個可迭代的文件對象,通過該文件對象可以對文件進行讀寫操作。如果指定文件不存在、訪問權限不夠、磁盤空間不夠或其他原因導致創(chuàng)建文件對象失敗則拋出異常。下面的代碼分別以讀、寫方式打開了兩個文件并創(chuàng)建了與之對應的文件對象。f1=open('file1.txt','r')f2=open('file2.txt','w')當對文件內容操作完以后,一定要關閉文件對象,這樣才能保證所做的任何修改都確實被保存到文件中。f1.close()8.1文件基本操作需要注意的是,即使寫了關閉文件的代碼,也無法保證文件一定能夠正常關閉。例如,如果在打開文件之后和關閉文件之前發(fā)生了錯誤導致程序崩潰,這時文件就無法正常關閉。在管理文件對象時推薦使用with關鍵字,可以有效地避免這個問題。8.1文件基本操作用于文件內容讀寫時,with語句的用法如下:withopen(filename,mode,encoding)asfp:#這里寫通過文件對象fp讀寫文件內容的語句另外,上下文管理語句with還支持下面的用法,進一步簡化了代碼的編寫。withopen('test.txt','r')assrc,open('test_new.txt','w')asdst:dst.write(src.read())8.1文件基本操作8.1文件基本操作文件打開方式模式說明r讀模式(默認模式,可省略),如果文件不存在則拋出異常w寫模式,如果文件已存在,先清空原有內容x寫模式,創(chuàng)建新文件,如果文件已存在則拋出異常a追加模式,不覆蓋文件中原有內容b二進制模式(可與其他模式組合使用)t文本模式(默認模式,可省略)+讀、寫模式(可與其他模式組合使用)文件對象常用屬性屬性說明buffer返回當前文件的緩沖區(qū)對象closed判斷文件是否關閉,若文件已關閉則返回Truefileno文件號,一般不需要太關心這個數(shù)字mode返回文件的打開模式name返回文件的名稱8.1文件基本操作文件對象常用方法方法功能說明close()把緩沖區(qū)的內容寫入文件,同時關閉文件,并釋放文件對象detach()分離并返回底層的緩沖,底層緩沖被分離后,文件對象不再可用,不允許做任何操作flush()把緩沖區(qū)的內容寫入文件,但不關閉文件read([size])從文本文件中讀取size個字符(Python3.x)的內容作為結果返回,或從二進制文件中讀取指定數(shù)量的字節(jié)并返回,如果省略size則表示讀取所有內容readable()測試當前文件是否可讀readline() 從文本文件中讀取一行內容作為結果返回readlines()把文本文件中的每行文本作為一個字符串存入列表中,返回該列表,對于大文件會占用較多內存,不建議使用seek(offset[,whence])把文件指針移動到新的位置,offset表示相對于whence的位置。whence為0表示從文件頭開始計算,1表示從當前位置開始計算,2表示從文件尾開始計算,默認為0seekable()測試當前文件是否支持隨機訪問,如果文件不支持隨機訪問,則調用方法seek()、tell()和truncate()時會拋出異常tell() 返回文件指針的當前位置truncate([size])刪除從當前指針位置到文件末尾的內容。如果指定了size,則不論指針在什么位置都只留下前size個字節(jié),其余的一律刪除write(s)把s的內容寫入文件writable()測試當前文件是否可寫writelines(s)把字符串列表寫入文本文件,不添加換行符8.1文件基本操作8.2文本文件操作案例精選例7-1向文本文件中寫入內容,然后再讀出。s='Helloworld\n文本文件的讀取方法\n文本文件的寫入方法\n'withopen('sample.txt','w')asfp:#默認使用cp936編碼fp.write(s)withopen('sample.txt')asfp:#默認使用cp936編碼print(fp.read())8.2文本文件基本操作例7-2讀取并顯示文本文件的前5個字符。withopen('sample.txt','r')sf:s=f.read(5)#讀取文件的前5個字符print('s=',s)print('字符串s的長度(字符個數(shù))=',len(s))8.2文本文件基本操作例7-3讀取并顯示文本文件所有行。withopen('sample.txt')asfp:#假設文件采用CP936編碼forlineinfp:#文件對象可以直接迭代print(line)8.2文本文件基本操作例7-4移動文件指針。Python2.x和Python3.x對于seek()方法的理解和處理是一致的,都是把文件指針定位到文件中指定字節(jié)的位置。但是由于對中文的支持程度不一樣,可能會導致在Python2.x和Python3.x中的運行結果有所不同。例如下面的代碼在Python3.5.2中運行,當遇到無法解碼的字符會拋出異常。8.2文本文件基本操作>>>s='中國山東煙臺SDIBT'>>>fp=open(r'D:\sample.txt','w')>>>fp.write(s)11>>>fp.close()>>>fp=open(r'D:\sample.txt','r')>>>print(fp.read(3))中國山>>>fp.seek(2)2>>>print(fp.read(1))國>>>fp.seek(13)13>>>print(fp.read(1))D>>>fp.seek(3)3>>>print(fp.read(1))UnicodeDecodeError:'gbk'codeccan'tdecodebyte0xfainposition0:illegalmultibytesequence8.2文本文件基本操作而在Python2.7.12中,不拋出異常,而是輸出亂碼,例如:>>>s='中國山東煙臺SDIBT'>>>fp=open(r'D:\sample.txt','w')>>>fp.write(s)>>>fp.close()>>>fp=open(r'D:\sample.txt','r')>>>print(fp.read(3))?й>>>fp.seek(2)>>>print(fp.read(3))?úé>>>print(fp.read(2))蕉>>>fp.close()8.2文本文件基本操作例7-5讀取文本文件data.txt(文件中每行存放一個整數(shù))中所有整數(shù),將其按升序排序后再寫入文本文件data_asc.txt中。withopen('data.txt','r')asfp:data=fp.readlines()data=[int(line.strip())forlineindata]data.sort()data=[str(i)+'\n'foriindata]withopen('data_asc.txt','w')asfp:fp.writelines(data)8.2文本文件基本操作例7-6編寫程序,保存為demo6.py,運行后生成文件demo6_new.py,其中的內容與demo6.py一致,但是在每行的行尾加上了行號。filename='demo6.py'withopen(filename,'r')asfp:lines=fp.readlines()maxLength=len(max(lines,key=len))lines=[line.rstri
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 4214.21-2025家用和類似用途電器噪聲測試方法第21部分:口腔衛(wèi)生器具的特殊要求
- 化學藥品新注冊分類申報資料要求(80號文)培訓大綱
- 城市交通規(guī)劃合同管理項目管理咨詢重點基礎知識點
- 單位法律知識培訓專題大綱
- 《慢性阻塞性肺病治療與護理》課件
- 進門隔斷租房合同協(xié)議
- 車庫互換使用協(xié)議書范本
- 退職合同協(xié)議
- 安保安全培訓計劃
- 常州手房轉讓協(xié)議
- JGT266-2011 泡沫混凝土標準規(guī)范
- 配電室運行維護投標方案(技術標)
- 小微企業(yè)安全生產標準化文件資料匯編 完整版已通過審核
- GB/T 32512-2016光伏發(fā)電站防雷技術要求
- 第5章鏈路層和局域網
- 大數(shù)據(jù)技術原理與操作應用 第8章 Flume日志采集系統(tǒng)
- 最新臭氧氧化技術專業(yè)知識講座課件
- 電力拖動自動控制系統(tǒng)-運動控制系統(tǒng)(第5版)習題答案
- 心血管疾病康復治療課件
- 海運提單填制練習
- 幼兒園童話劇“拔蘿卜”劇本
評論
0/150
提交評論