版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第8章文件操作文件文件,記錄在存儲介質(zhì)上的一組相關(guān)信息的集合。存儲介質(zhì)是硬盤、U盤等各種外存。文件可以長期保存,通過文件名訪問。文件名:文件主名.擴展名123.txtabc.docxaaa.xlsxhello.csv123.py文件操作文件操作過程,主要是先打開文件,讀/寫文件,最后關(guān)閉文件。4主要內(nèi)容1.文件打開與關(guān)閉2.文件讀取3.文件寫入 4.OS模塊操作文件和目錄5.CSV文件的讀取和寫入。文件打開與關(guān)閉文件存儲在外存中,需要先調(diào)入內(nèi)存后才能使用。文件打開:就是將文件從外存中調(diào)入內(nèi)存的過程。open命令,打開文件,生成file對象。<文件名>包括路徑和文件名稱。當文件中包括中文時,encoding="utf-8",否則省略encoding。<File對象名>=open(<文件名>,<打開模式>[,encoding=編碼])文件打開與關(guān)閉文件打開模式,包括只讀、寫入、追加等,默認模式是只讀(r)。<File對象名>=open(<文件名>,<打開模式>[,encoding=編碼])模式可執(zhí)行操作格式若文件不存在時文件指針在文件的位置備注r只讀字符串報錯開頭默認打開模式rb只讀二進制報錯開頭r+讀寫字符串報錯開頭rb+讀寫二進制報錯開頭w只寫字符串創(chuàng)建新文件開頭覆蓋原文件wb只寫二進制創(chuàng)建新文件開頭覆蓋原文件w+讀寫字符串創(chuàng)建新文件開頭覆蓋原文件wb+讀寫二進制創(chuàng)建新文件開頭a追加字符串創(chuàng)建新文件結(jié)尾ab追加二進制創(chuàng)建新文件結(jié)尾a+追加字符串創(chuàng)建新文件結(jié)尾ab+追加二進制創(chuàng)建新文件結(jié)尾文件打開與關(guān)閉編寫兩個文本文件。text.txt,只包括西文字符。text2.txt,包括中文字符。r-只讀方法1、r-以只讀方式打開文件,文件不可寫,文件指針指向文件開頭?!纠?.1】r方式打開文件。#eg0801.pyfile=open('text.txt','r')
#程序和文件在一起
#file=open('d:\\Python\\text.txt','r')
#絕對路徑
#file=open(r'd:\Python\text.txt','r')
#r輸入絕對路徑print(file.read())#讀取文件file.close()#關(guān)閉文件file.close()
關(guān)閉已經(jīng)打開的文件。r-只讀方法(1)程序和文件在同一目錄下,只需要文件名即可。
file=open('text.txt','r')(2)程序和文件不在同一目錄下,則需要絕對路徑或相對路徑。
file=open('d:\\Python\\text.txt','r') 注意:'\'為轉(zhuǎn)義符
file=open(r'd:\Python\text.txt','r') 注意:r輸入不需要轉(zhuǎn)義符如果文件不存在,則提示出錯如下。r-只讀方法文件中有中文字符時,會出現(xiàn)亂碼或者報錯,此時加上encoding="UTF-8"。#eg0801b.pyfile=open('text2.txt','r')
print(file.read())file.close()#eg0801c.pyfile=open('text2.txt','r',encoding="UTF-8")print(file.read())file.close()r-只讀方法r方式打開的文件,如果寫入會報錯。#eg0801d.pyfile=open('text2.txt','r',encoding="UTF-8")print(file.read())file.write("abcdefg")file.close()rb-二進制只讀方式rb-以二進制格式打開文件,文件只讀不可寫,文件指針指向文件開頭?!纠?.2】rb#eg0802.pyfile=open('text.txt','rb')
print(file.read())#file.write("abcdefg")#不可寫入file.close()r+讀寫r+打開文件可讀寫,寫入內(nèi)容為字符串,文件指針指向文件開頭,寫入的內(nèi)容從頭開始替換?!纠?.3】r+#eg0803.pyfile=open('text3.txt','r+')
file.write("abcdefg")#寫入file.close()file=open('text3.txt','r')print(file.read())#重新讀入file.close()rb+讀寫rb+以二進制格式打開文件可讀寫,寫入內(nèi)容為bytes類型,文件指針指向文件開頭,寫入的內(nèi)容從頭開始替換?!纠?.4】rb+#eg0804.pyfile=open('text4.txt','rb+')file.write("xxxxxx")#'rb+'直接寫入字符串出錯file.close()rb+讀寫#eg0804b.pyfile=open('text4.txt','rb+')
file.write(b"xxxxxx")#'rb+'寫入byesfile.close()file=open('text4.txt','rb')print(file.read())#重新讀入file.close()w寫入w,打開文件只可寫入不可讀,寫入內(nèi)容為字符串類型。如文件已存在則覆蓋,清空原文件;如不存在,則新建文件?!纠?.5】w#eg0805.pyfile=open('text5.txt','w')file.write("IlovePython.\n")file.write("HelloPython.\n")file.write("我愛學(xué)編程!\n")file.close()file2=open('text5.txt','r')print(file2.read())file2.close()w寫入#eg0805b.pyfile=open('text5.txt','w')print(file.read())#不可讀,報錯file.close()wb寫入wb,以二進制格式打開文件,只可寫入不可讀,寫入內(nèi)容為bytes類型。如文件已存在則覆蓋,清空原文件;如不存在,則新建文件【例8.6】wb#eg0806.pyfile=open('text6.txt','wb')file.write(b"IlovePython.\n")file.write(b"HelloPython.\n")file.close()file2=open('text6.txt','r')print(file2.read())file2.close()w+讀寫w+打開文件可讀寫,寫入內(nèi)容為字符串。如文件已存在則覆蓋,清空原文件;如不存在,則新建文件【例8.7】w+#eg0807.pyfile=open('text7.txt','w+')file.write("xxxxxx\n")file.write("yyyyyy\n")file.close()file=open('text7.txt','r')print(file.read())file.close()wb+讀寫wb+二進制格式打開文件可讀寫,寫入內(nèi)容為bytes。如文件已存在則覆蓋,清空原文件;如不存在,則新建文件【例8.8】wb+#eg0808.pyfile=open('text8.txt','wb+')file.write(b"aaaaaaa\n")file.write(b"bbbbbbb\n")file.close()file=open('text8.txt','r')print(file.read())file.close()a追加a打開文件可追加不可讀,寫入內(nèi)容為字符串。如文件已存在,指針指向文件結(jié)尾,新內(nèi)容追加到已有內(nèi)容之后;如文件不存在,則新建文件進行寫入。【例8.9】a#eg0809.pyfile=open('text9.txt','a')
file.write("aaaaaaa\n")file.write("bbbbbbb\n")file.close()file=open('text9.txt','r')print(file.read())file.close()ab追加ab二進制方式打開文件可追加不可讀,寫入內(nèi)容為bytes。如文件已存在,指針指向文件結(jié)尾,新內(nèi)容追加到已有內(nèi)容之后;如文件不存在,則新建文件進行寫入。【例8.10】ab#eg0810.pyfile=open('text10.txt','ab')file.write(b"xxxxxx\n")file.write(b"yyyyyy\n")file.close()file=open('text10.txt','r')print(file.read())file.close()a+追加a+打開文件可追加可讀,寫入內(nèi)容為字符串。如文件已存在,指針指向文件結(jié)尾,新內(nèi)容追加到已有內(nèi)容之后;如文件不存在,則新建文件進行讀寫。【例8.11】a+#eg0811.pyfile=open('text11.txt','a+')file.write("999999999\n")file.write("888888888\n")file.close()file=open('text11.txt','r')print(file.read())file.close()ab+追加ab+二進制方式打開文件可追加可讀,寫入內(nèi)容為bytes。如文件已存在,指針指向文件結(jié)尾,新內(nèi)容追加到已有內(nèi)容之后;如文件不存在,則新建文件進行讀寫?!纠?.12】ab+#eg0812.pyfile=open('text12.txt','ab+')file.write(b"mmmmm\n")file.write(b"nnnnn\n")file.close()file=open('text12.txt','r')print(file.read())file.close()withopen前邊的寫法,如果file.close()語句之前出現(xiàn)錯誤,則file.close()不會執(zhí)行,文件不會正確關(guān)閉。withopenwithopen寫法,可以自動調(diào)用close()方法,關(guān)閉文件。不需要寫file.close()語句。withopen(<文件名>,<打開模式>)as<File對象名>:
對file對象的具體的操作withopen【例8.13】withopen語句#eg0813.pywithopen('text13.txt','w')asfile:file.write("mmmmm\n")file.write("nnnnn\n")withopen('text13.txt','r')asfile:print(file.read())為了避免忘記關(guān)閉文件,而導(dǎo)致不必要的麻煩,建議使用withopen打開文件。文件的讀取文件讀取有三個方法:read():讀取整個文件或字節(jié)數(shù)readline():讀取一行readlines():將文件內(nèi)容分析成一個行列表讀取-read()read():讀取整個文件的內(nèi)容放到一個字符串變量中read(size):每次最多讀取size個字節(jié)。因為文件太多,可能超過可用內(nèi)存,可以多次調(diào)用read(size)。【例8.14】read()#eg0814.pywithopen('text14.txt','r')asf:print(f.read())#eg0814b.pywithopen('text14.txt','r')asf:print(f.read(6))print(f.read(6))print(f.read(6))print(f.read(6))讀取-readline()readline()每次讀取一行?!纠?.15】readline()#eg0815.pyf=open('text14.txt','r')print(f.readline())#讀一行print(f.readline())f.close()讀取-readlines()readlines(),自動將文件內(nèi)容分析成一個行的列表?!纠?.16】readlines()#eg0816.pyf=open('text14.txt','r')a=f.readlines()print(a)f.close()列表中每一個元素字符串中包括了換行符"\n"#eg0816b.pyf=open('text14.txt','r')forlineinf.readlines():print(line)f.close()列表中每一個元素字符串中包括了換行符"\n",打印后,多出空行可以用rstrip()清除空行#eg0816c.pyf=open('text14.txt','r')forlineinf.readlines():print(line.rstrip())f.close()withopenwithopen逐行讀取文件。【例8.17】withopen逐行讀取文件#eg0817.pywithopen('text14.txt','r')asf:forlineinf:print(line.rstrip())#eg0817b.pywithopen('text14.txt','r')asf:
lines=f.readlines()forlineinlines:print(line.rstrip())seek()在讀寫文件的時候,可以調(diào)整文件指針的位置,從新的位置讀寫文件。文件開始結(jié)尾
文件指針seek()seek()定位文件指針的位置。from_what:表示從哪兒開始。0:從文件開頭開始,移動偏移量1:從指針當前位置開始,移動偏移量2:從文件末尾移動。offset:移動的偏移量。整數(shù),向后移動負數(shù),向前移動seek(offset,from_what)seek(100,0)seek(100,1)seek(-100,1)seek(-100,2)#eg0818.pywithopen('text14.txt','r')asf:
f.seek(6,0)
#從文件開始向后移動6字符print(f.read())#eg0818b.pywithopen('text14.txt','rb')asf:f.seek(-16,2)print(f.read())#eg0818c.pywithopen('text14.txt','r')asf:
f.seek(-16,2)print(f.read())python3版本,b模式的from_what支持0、1和2;非b模式的from_what只支持0。文件的寫入文件寫入的兩個方法:write(str):寫入一行字符串writelines():寫入多行當寫入文件時,系統(tǒng)往往不是將數(shù)據(jù)立即寫入磁盤,而是將數(shù)據(jù)存放在文件緩沖區(qū)中。在調(diào)用f.close()關(guān)閉文件時,會將數(shù)據(jù)寫入磁盤。如果忘記關(guān)閉文件,可能會丟失一部分數(shù)據(jù)。write()【例8.19】write(),寫入一行文本。#eg0819.pyf=open('text19.txt','w')f.write("IlovePython!")f.write("HelloChina!")f.write("北京冬奧,加油!")f.close()f=open('text19.txt','r')print(f.read())f.close()write()語句輸出多行字符串,不會自動換行,會連接在一起。write()#eg0819b.pyf=open('text19.txt','w')f.write("IlovePython!\n")f.write("HelloChina!\n")f.write("北京冬奧,加油!\n")f.close()f=open('text19.txt','r')print(f.read())f.close()write()語句在一行字符串后加上"\n"writelines()writelines(),以列表形式一次寫入多行。【例8.20】writelines()#eg0820.pyf=open('text20.txt','w')f.writelines(["IlovePython!\n","HelloChina!\n","北京冬奧,加油!\n"])f.close()f=open('text20.txt','r')print(f.read())f.close()os模塊操作文件和目錄os模塊提供操作系統(tǒng)的功能接口函數(shù)。os模塊能自適應(yīng)不同操作系統(tǒng),根據(jù)不同平臺進行相應(yīng)操作。返回操作系統(tǒng)名字。>>>importos>>>'nt'>>>'nt'windows'posix'linux或unixos.listdir()/os.pardir/os.curdiros.listdir()/os.pardir/os.curdir>>>importos>>>os.listdir()#列出當前目錄下的文件和目錄['1.py','DLLs','Doc','eg0801.py','eg0901_mod.py','eg0903mod.py','eg1001_mod.py','eg1003mod.py','include','Lib','libs','LICENSE.txt','NEWS.txt','python.exe','python3.dll','python39.dll','pythonw.exe','Scripts','tcl','Tools','vcruntime140.dll','vcruntime140_1.dll','__pycache__']>>>os.listdir("d:\\ai")#列出指定目錄下的文件和目錄['ins.bat','playsound-1.2.2-py2.py3-none-any.whl']>>>os.pardir#當前目錄的父目錄'..'>>>os.curdir#當前目錄'.'os.getcwd()/os.chdir()os.getcwd(),輸出腳本當前所在路徑os.chdir(),更改路徑>>>importos>>>os.getcwd()#取得當前路徑'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python39'>>>os.chdir("d:\\Python")#改變當前路徑>>>os.getcwd()'d:\\Python'>>>os.pathos.path.abspath(path),返回path的絕對路徑\>>>importos>>>os.path.abspath(".")#返回當前目錄路徑'd:\\Python'>>>split()/join()os.path.split(path),分解path的目錄和文件名。os.path.join(path1,path2,......),組合path。>>>importos>>>os.path.split("d:\\Python\\text.txt")('d:\\Python','text.txt')>>>os.path.split("d:\\Python\\")('d:\\Python','')>>>os.path.join("d:\\Python","text.txt")'d:\\Python\\text.txt'>>>os.path.join("d:\\Python\\a.txt","d:\\Python\\b.txt")'d:\\Python\\b.txt'>>>os.path.join("111","222","333")'111\\222\\333'dirname()和basename()os.path.dirname(path),返回path中的文件夾部分os.path.basename(path),返回path中的文件名>>>importos>>>os.path.dirname("d:\\Python\\text.txt")'d:\\Python'>>>os.path.basename("d:\\Python\\text.txt")'text.txt'getmtime()/getatime()/getctime()os.path.getmtime(path),返回path的最后修改時間os.path.getatime(path),返回path的最后訪問時間os.path.getctime(path),返回path的創(chuàng)建時間>>>importos>>>os.path.getmtime("d:\\Python\\text.txt")1643354535.2262716>>>os.path.getatime("d:\\Python\\text.txt")1643354535.2262716>>>os.path.getctime("d:\\Python\\text.txt")1643271865.5824342>>>getsize()/exists()os.path.getsize(path),返回文件的大小os.path.exists(path),文件或文件夾是否存在。>>>importos>>>os.path.getsize("d:\\Python\\text.txt")70>>>os.path.exists("d:\\Python\\text.txt")True>>>os.path.exists("d:\\Python\\textttt.txt")False>>>os.path.exists("d:\\Python\\")True>>>os.rename()/os.remove()os.rename(oldname,newname),重命名os.remove(filename),刪除文件>>>importos>>>os.rename("d:\\P
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 服務(wù)提供商銷售協(xié)議
- 國防生培養(yǎng)協(xié)議書
- 2024版?zhèn)€人二手車輛轉(zhuǎn)讓合同范本
- 房屋拆遷合同糾紛處理辦法
- 聘用合同范本簡單2024年
- 代理證券買賣協(xié)議書范本
- 正規(guī)的食堂承包合同范本
- 老人結(jié)伴旅游免責(zé)協(xié)議書
- 施工分包合同書
- 勞務(wù)合同書范本匯編
- 2024年留學(xué)機構(gòu)項目資金籌措計劃書代可行性研究報告
- 2024年江蘇蘇州張家港市人社局招聘公益性崗位(編外)人員2人歷年高頻難、易錯點500題模擬試題附帶答案詳解
- 2024年電梯安全總監(jiān)安全員考試題參考
- 學(xué)習(xí)解讀2024年《關(guān)于深化產(chǎn)業(yè)工人隊伍建設(shè)改革的意見》課件
- 浪潮人力崗在線測評題
- 期中 (試題) -2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 貿(mào)易公司聘用勞動合同書(3篇)
- 嶺南版2年級上冊美術(shù) 9我家的菜籃子 說課 教案
- 2023年中國海洋石油集團有限公司招聘筆試真題
- 《ISO 55001-2024資產(chǎn)管理-資產(chǎn)管理體系-要求》之1:“4 組織環(huán)境-4.1理解組織及其環(huán)境”解讀和應(yīng)用指導(dǎo)材料(雷澤佳-2024)
- 2024年南昌市南昌縣城管委招考編外城管協(xié)管員高頻500題難、易錯點模擬試題附帶答案詳解
評論
0/150
提交評論