




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
目錄文件01文件的訪問02文件夾的操作03文件應用案例04SchoolofComputerSciencePart.01PYTHON文件文件的概念簡單地說,文件是存儲在輔助存儲器上的數(shù)據(jù)序列,在邏輯上具有完整意義。文件是數(shù)據(jù)的集合和抽象;相對的,函數(shù)是程序的集合和抽象。用文件組織數(shù)據(jù)更為靈活和有效。Windows系統(tǒng)的數(shù)據(jù)文件按照編碼方式分為兩大類:文本文件二進制文件文本文件文本文件由單一特定編碼的字符組成,如UTF-8編碼。文本文件可以處理各種語言所需的字符。文件中只包含基本文本字符,不包括諸如字體、字號、顏色等信息。它可以在文本編輯器和瀏覽器中顯示。即在任何情況下,文本文件都是可讀的。文本文件可以看做存儲在存儲器上的一個長字符串。二進制文件二進制文件由比特0和比特1組成,文件數(shù)據(jù)的組織格式與文件用途有關。二進制文件是信息按照非字符的特定格式形成的文件,如jpg格式的圖像文件、avi格式的視頻文件。二進制文件與文本文件最大的區(qū)別就是有沒有統(tǒng)一字符編碼。二進制文件沒有統(tǒng)一字符編碼,使用其它編碼方式。二進制文件可以看作字節(jié)流,而不是字符串。例5.1SchoolofComputerSciencePart.02PYTHON文件的訪問在Python中對文件的操作通常按照以下三個步驟進行:(1)使用open()函數(shù)打開(或建立)文件,返回一個file對象。(2)使用file對象的讀/寫方法對文件進行讀/寫的操作。其中,將數(shù)據(jù)從外存?zhèn)鬏數(shù)絻?nèi)存的過程稱為讀操作,將數(shù)據(jù)從內(nèi)存?zhèn)鬏數(shù)酵獯娴倪^程稱為寫操作。(3)使用file對象的close()方法關閉文件。文件的訪問文件的存儲狀態(tài)文件的占用狀態(tài)File=open(….)File.close()Fiel.write(s)File.writelines(lines)File.seek(offset)Fiel.readall()File.read(size)File.readline(size)File.readlines(hint)文件的操作<a>.<b>()輸入文件輸入流執(zhí)行程序輸出流輸出文件文件對象Fileopen()函數(shù)用來打開文件。open()函數(shù)需要一個字符串路徑,表明希望打開文件,并返回一個文件對象。語法如下:fileobj=open(filename[,mode[,buffering]])打開(建立)文件>>>helloFile=open("d:\\python\\hello.txt")打開模式含義"r"只讀模式,若文件不存在則返回異常,默認值"w"覆蓋寫模式,文件不存在則創(chuàng)建,存在則覆蓋"x"創(chuàng)建寫模式,文件不存在則創(chuàng)建,存在則返回異常"a"追加寫模式,文件不存在則創(chuàng)建,存在則追加"b"二進制文件模式"t"文本文件模式"+"與r/w/x/a一起使用,在原功能基礎上追加讀寫功能filenamemode"rb"helloFile我們可以調(diào)用文件對象file的多種方法讀取文件內(nèi)容。讀取文本文件操作方法含義<file>.readall()讀入整個文件內(nèi)容,返回一個字符串或一個字節(jié)流<file>.read(size=-1)讀入整個文件內(nèi)容,若給出參數(shù)size,則讀入前size長度的字符串或字節(jié)流<file>.readline(size=-1)從文件讀入一行內(nèi)容,若給出參數(shù)size,則讀入該行前size長度的字符串或字節(jié)流<file>.readlines(hint=-1)從文件讀入所有行內(nèi)容,以每行內(nèi)容為元素形成列表,若給出參數(shù)hint,則讀入hint行字符串或字節(jié)流取決于文件的打開方式。文件以文本方式打開則返回字符串;以二進制方式打開則返回字節(jié)流。1.read()方法讀取文本文件helloFile=open("d:\\python\\hello.txt")fileContent=helloFile.read()helloFile.close()print(fileContent) read(size)方法設置參數(shù)size限制read()方法一次讀取文件的大小。helloFile.read()fileContent2.readline()方法readline()方法從文件中獲取一個字符串,每個字符串就是文件中的每一行。讀取文本文件helloFile=open("d:\\python\\hello.txt")fileContent=""whileTrue:line=helloFile.readline()ifline=="":#或者ifnotlinebreakfileContent+=linehelloFile.close()print(fileContent)
3.readlines()方法readlines()方法從文件中獲取全部內(nèi)容,并形成一個列表,列表的每一個元素就是文件里每一行的內(nèi)容。讀取文本文件helloFile=open("d:\\python\\hello.txt")forlineinhelloFile.readlines():print(line)helloFile.close()print(fileContent) helloFile=open("d:\\python\\hello.txt")forlineinhelloFile:print(line)helloFile.close()
當文件過大時,一次讀入所有內(nèi)容會占用過多內(nèi)存,造成執(zhí)行效率下降將文件本身作為一個行序列,逐行讀入內(nèi)容到內(nèi)存,逐行處理SchoolofComputerSciencePart.02PYTHON文件的訪問寫文件與讀文件相似,都需要先使用open()函數(shù)創(chuàng)建文件對象連接。所不同的是,打開文件時是以“寫”模式或“添加”模式打開。如果文件不存在,則創(chuàng)建該文件。與讀文件時不能添加或修改數(shù)據(jù)類似,寫文件時也不允許讀取數(shù)據(jù)。寫文本文件方法含義<file>.write(s)向文件寫入一個字符串或一個字節(jié)流<file>.writelines(lines)將一個元素全為字符串的列表寫入文件write(s)writelines(lines)完成一個自定義函數(shù)copy_file(),實現(xiàn)文件的復制功能。例5-2oldfilenewfilewritelines()方法向文件寫入一個列表,列表的每一個元素都是字符串。寫文本文件hmldFile=open("C:\\lynn\\Python\\homeland.txt","a+")ls=["我最親愛的祖國\n","我永遠緊依著你的心窩\n","你用你那母親的脈搏\n","和我訴說\n"]hmldFile.writelines(ls)hmldFile.seek(0,0)forlineinhmldFile:print(line)hmldFile.close() "a+"\n\n\n\nwritelines(ls)seek(0,0)文件內(nèi)移動無論讀或?qū)懳募琍ython都會跟蹤文件中的讀寫位置。在默認情況下,文件的讀/寫都從文件的開始位置進行。Python提供了seek()方法控制文件讀寫起始位置,使得我們可以改變文件讀/寫操作發(fā)生的位置。文件緩沖區(qū)……124356結束文件當前位置seek()函數(shù)將文件當前指針由引用點移動指定的字節(jié)數(shù)到指定的位置。
seek(offset[,whence])\nwhenceoffset文件內(nèi)移動exampleFile=open("C:\\lynn\\Python\\example.txt","w+")exampleFile.write("123456789")exampleFile.seek(3)exampleFile.write("ZUT")exampleFile.seek(0)s=exampleFile.read()exampleFile.close()print(s)當文件以文本文件方式打開時,只能默認從文件頭計算偏移量,即whence參數(shù)為1或2時,offset參數(shù)只能取0,Python解釋器不接受非零當前偏移。"w+""ZUT"文件緩沖區(qū)……124356結束文件當前位置……1243569ZUT文件內(nèi)移動以二進制方式打開文件時,文件指針可以參數(shù)offset的值從參數(shù)whence指定的位置向前/向后偏移。>>>ex1File=open("C:\\lynn\\python\\example.txt","r+b")>>>ex1File.seek(3)3>>>ex1File.seek(-1,1)2>>>s=ex1File.read(3)>>>print(s)b'345'文件緩沖區(qū)……124356結束文件當前位置seek(3)seek(-1,1)read(3)應該牢記使用close方法關閉文件。文件的關閉helloFile=open("C:\\lynn\\python\\hello.txt","w")try: helloFile.write("Hello,SunnyDay!")finally: helloFile.close()也可以使用with語句自動關閉文件:withopen("d:\\python\\hello.txt")ashelloFile: s=helloFile.read()print(s)try:
finally: helloFile.close()withopen("d:\\python\\hello.txt")ashelloFile:Python沒有二進制類型,但是可以用string字符串類型來存儲二進制類型數(shù)據(jù),因為string是以字節(jié)為單位的。1.數(shù)據(jù)轉(zhuǎn)換成字節(jié)串(以字節(jié)為單位的字符串)pack()方法可以把數(shù)據(jù)轉(zhuǎn)換成字節(jié)串。格式:pack(格式化字符串,數(shù)據(jù))格式化字符串中可用的格式字符見表5-1中格式字符。二進制文件的讀寫importstructa=20ex1File=open("C:\lynn\Python\ex3.txt","wb")bytes=struct.pack(‘i’,a) #將a變?yōu)閟tring字節(jié)串ex1File.write(bytes)ex1File.closeprint(bytes)結果是:b'\x14\x00\x00\x00'字符串按字節(jié)同a的二進制存儲內(nèi)容相同\x表示十六進制"wb"struct.pack(‘i’,a)2.字節(jié)串(以字節(jié)為單位的字符串)還原成數(shù)據(jù)unpack()方法可以把相應數(shù)據(jù)的字節(jié)串還原成數(shù)據(jù)。bytes=struct.pack('i',20) #將20變?yōu)閟tring字符串再進行反操作,現(xiàn)有二進制數(shù)據(jù)bytes(其實就是字符串),將它反過來轉(zhuǎn)換成Python的數(shù)據(jù)類型:a,=struct.unpack('i',bytes)二進制文件的讀寫importstructbinfile=open("C:\\lynn\\python\\hellobin.txt","rb")bytes=binfile.read()(a,b,c,d)=struct.unpack(‘5s6sif’,bytes)t=struct.unpack(‘5s6sif’,bytes)print(t)通過struct.unpack()解碼成變量或元組寫并且讀一個二進制文件file9.txt。例5-3SchoolofComputerSciencePart.03PYTHON文件夾的操作當前工作目錄在交互式環(huán)境中輸入以下代碼:>>>importos>>>os.getcwd()D:\Python35DLLs_bsddb.pydpython.exe當前工作目錄絕對路徑相對路徑D:\..\D:\Python35.\D:\Python35\DLLs.\DLLsD:\Python35\DLLs\_bsddb.pyd.\DLLs\_bsddb.pydD:\Phthon35\python.exe.\python.exe1.創(chuàng)建新目錄程序可以用os.makedirs()函數(shù)創(chuàng)建新目錄。在交互式環(huán)境中輸入以下代碼:>>>importos>>>os.makedirs("e:\\python1\\ch5files")2.刪除目錄當目錄不再使用,可以將它刪除。使用rmdir()函數(shù)刪除目錄:>>>importos>>>os.rmdir("e:\\python1\\ch5files")>>>os.rmdir("e:\\python1")>>>os.path.exists("e:\\python1") #運行結果為False文件夾的操作3.列出目錄內(nèi)容使用os.listdir()函數(shù)可以返回給出路徑中文件名及文件夾名的字符串列表:>>>os.mkdir("e:\\python1")>>>os.listdir(“e:\\python1”) #返回空列表4.修改當前目錄使用os.chdir()函數(shù)可以更改當前工作目錄:>>>os.chdir("e:\\python1")>>>os.listdir(".") #.代表當前工作目錄文件夾的操作1.獲取路徑和文件名os.path.split(path):返回參數(shù)的路徑名稱和文件名組成的字符串元組。os.path.dirname(path):返回path參數(shù)中的路徑名稱字符串。os.path.basename(path):返回path參數(shù)中的文件名。2.檢查路徑有效性os.path.exists(path):判斷參數(shù)path的文件或文件夾是否存在。存在返回true,否則返回false。os.path.isfile(path):判斷參數(shù)path存在且是一個文件,則返回true,否則返回false。os.path.isdir(path):判斷參數(shù)path存在且是一個文件夾,則返回true,否則返回false。3.查看文件大小os.path模塊中的os.path.getsize()函數(shù)可以查看文件大小。文件的操作例5-4統(tǒng)計指定文件夾下所有文件的大小。importostotalSize=0os.chdir("C:\\lynn\\Python")forfileNameinos.listdir(os.getcwd()):totalSize+=os.path.getsize(fileName)print(totalSize)totalSizeos.path.getsize(fileName)chdir("C:\\lynn\\Python")os.listdir(os.getcwd())4.重命名文件os.rename()函數(shù)可以幫助我們重命名文件。os.rename("d:\\python\\hello.txt","d:\\python\\helloworld.txt")5.復制文件和文件夾shutil模塊中提供一些函數(shù),幫助我們復制、移動、改名和刪除文件夾。可以實現(xiàn)文件的備份。6.文件和文件夾的移動和改名shutil.move(source,destination):shutil.move()函數(shù)與shutil.copy()函數(shù)用法相似,參數(shù)destination既可以是一個包含新文件名的路徑,也可以僅包含文件夾。7.刪除文件和文件夾os模塊和shutil模塊都有函數(shù)可以刪除文件或文件夾。os.remove(path)/os.unlink(path):刪除參數(shù)path指定的文件。os.remove("e:\\python-backup\\data-backup.txt")os.path.exists("e:\\python-backup\\data-backup.txt")#False文件的操作os.walk()函數(shù)返回參數(shù)路徑下所有文件及子目錄信息元組,即遍歷目錄樹。importoslist_dirs=os.walk("C:\\lynn\\Python")#返回一個元組forfolderName,subFolders,fileNamesinlist_dirs:print("當前目錄:"+folderName+"\n")forsubFolderinsubFolders:print(folderName+"的子目錄"+"是--"+subFolder+"\n")forfileNameinfileNames:print(subFolder+"的文件"+"是--"+fileName+"\n")文件的操作os.walk("C:\\lynn\\Python")SchoolofComputerSciencePart.04PYTHON文件的應用案例1、游戲地圖存儲每個格子狀態(tài)值分別用常量Wall(0)代表墻,Worker(1)代表人,Box(2)代表箱子,Passageway(3)代表路,Destination(4)代表目的地,WorkerInDest(5)代表人在目的地,RedBox(6)代表放到目的地的箱子將地圖信息寫入文件importos#地圖信息寫入文件helloFile=open("map1.txt","w")helloFile.write("0,0,0,3,3,0,0\n")helloFile.write("3,3,0,3,4,0,0\n")helloFile.write("1,3,3,2,3,3,0\n")helloFile.write("4,2,0,3,3,3,0\n")helloFile.write("3,3,3,0,3,3,0\n")helloFile.write("3,3,3,0,0,3,0\n")helloFile.write("3,0,0,0,0,0,0\n")helloFile.close()從文件中讀取地圖信息#讀文件helloFile=open("map1.txt","r")myArray1=[]whileTrue:line=helloFile.readline()ifline=="": #或者ifnotlinebreakline=line.replace("\n","") #將讀取的1行中最后的換行符去掉
myArray1.append(line.split(","))helloFile.close()print(myArray1)在后面圖形化推箱子游戲中,根據(jù)數(shù)字代號用對應圖形顯示到界面上,即可完成地圖讀取任務。line.split(",")line.replace("\n","")案例2、文章詞頻統(tǒng)計讀取文件分詞并統(tǒng)計詞頻結果排序輸出案例2、文章詞頻統(tǒng)計讀取文件defgetFileText(): withopen("C:\\lynn\\Python\\letter.txt","r")asletterFile: filTxt=letterFile.read() filTxt=filTxt.lower() forchin'!"#$%&()*+-*/,.:;<=>?@[]\\^_{}|~': filTxt=filTxt.replace(ch,"") returnfilTxtletterTxt=getFileText()使用filTxt.lower()函數(shù)將所有單詞轉(zhuǎn)為小寫形式,保證同一個單詞不同大小寫形式統(tǒng)計的一致用filTxt.replace()方法將特殊字符統(tǒng)一替換為空格,為后面的分詞做準備words=letterTxt.split()wdCountDict={}excludes={"the","of","you","your","that","will","this","don't"}forwordinwords: wdCountDict[word]=wdCountDict.get(word,0)+1forwordinexcludes:del(wdCountDict[word])分詞并統(tǒng)計詞頻分詞并使用字典統(tǒng)計每一個單詞的
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025邯鄲武安市選聘農(nóng)村黨務(村務)工作者180名筆試備考試題及參考答案詳解
- 2024年河北邯鄲叢臺區(qū)公開招聘教師200名筆試備考題庫含答案詳解
- 2022年河北邯鄲叢臺區(qū)招聘社區(qū)工作者100人備考題庫含答案詳解
- 2025年鄂爾多斯市公務員考試行測試卷歷年真題及答案詳解(必刷)
- 2025年統(tǒng)計師之初級統(tǒng)計工作實務能力測試試卷A卷附答案
- 山西省部分重點高中2024-2025學年高二下學期3月聯(lián)考物理試題(解析版)
- 湖北省多校2024-2025學年高二下學期3月聯(lián)考物理試卷(解析版)
- 陜西省漢中市部分學校2024-2025學年高一下學期階段性測試生物試卷(掃描版無答案)
- 肯德基的社交媒體推廣
- 彩妝與服裝搭配 服裝搭配彰顯風格
- 海洋權益《基本概念》教案
- ()初中語文必背古詩文填空題附完整答案【題】
- 專題06手拉手模型(原卷版+解析)
- 2023日語專四真題專業(yè)四級真題
- 高中物理教學中物理實驗的改進與創(chuàng)新
- 2024年河南高考成績一分一段表(理科+文科)
- 2024年會計知識競賽考試題庫及答案(共170題)
- 吉林省2024年中考物理試題(含答案)
- 江西省新余市2023-2024學年八年級下學期期末質(zhì)量監(jiān)測物理試題
- HSK標準教程5上-課件-L2
- A型肉毒素治療知情同意書 注射知情同意書
評論
0/150
提交評論