一、文件的打開與關(guān)閉 1、文件的打開 在Python中,open方法用來打開文件,語法格式如下: open(文件名[, 訪問模式,encoding=編碼格式]) 上述格式中,“文件名”必須要填寫,“訪問模式”和“encoding”是可選的。
注意:使用open方法打開文件時(shí),如果沒有注明訪問模式(默認(rèn)是只讀的訪問模式),則必須保證文件是存在的,否則就會(huì)報(bào)錯(cuò)。如下所示:
2、文件模式 如果使用open方法打開文件時(shí),只帶一個(gè)文件名,那么我們只能讀取文件。如果打開的文件允許寫數(shù)據(jù),則必須指明文件的模式。Python中文件的訪問模式有多種,如下所示:
- r 以只讀方式打開文件(read)。文件的指針將會(huì)放在文件的開頭。默認(rèn)模式。
- w 打開一個(gè)文件只用于寫入(write)。如果該文件已存在則將其覆蓋;若文件不存在,創(chuàng)建新文件
- a 打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說,新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建文件并寫入。
- rb 以二進(jìn)制格式打開一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開頭。默認(rèn)模式。
- wb 以二進(jìn)制格式打開一個(gè)文件只用于寫入。如果該文件已存在則將其覆蓋;若文件不存在,創(chuàng)建新文件。
- ab 以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說,新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建文件并寫入。
- r+ 打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭。文件若不存在,程序會(huì)crash。
- w+ 打開一個(gè)文件用于讀寫。如果該文件已存在則將其覆蓋;若文件不存在,創(chuàng)建新文件。
- a+ 打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開時(shí)會(huì)是追加模式。如果該文件不存在,創(chuàng)建文件用于讀寫。
- rb+ 以二進(jìn)制格式打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭。
- wb+ 以二進(jìn)制格式打開一個(gè)文件用于讀寫。如果該文件已存在則將其覆蓋;若文件不存在,創(chuàng)建新文件。
- ab+ 以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。
3、文件的關(guān)閉 凡是打開的文件,切記要使用close方法關(guān)閉。即使文件會(huì)在程序退出后自動(dòng)關(guān)閉,但是考慮到數(shù)據(jù)的安全性,在每次使用完文件后,都要使用close方法關(guān)閉文件,否則一旦程序崩潰, 很可能導(dǎo)致文件中的數(shù)據(jù)沒有保存。close方法使非常簡單,如下所示:
4、安全的打開關(guān)閉文件的方式(自動(dòng)調(diào)用close方法)
with open("d://test.txt","w") as f:
或者
with open("d://test.txt","w",endconding="utf-8") as f:
二、文件的讀寫 1、寫文件
1.1 向文件寫數(shù)據(jù),需要用到write方法來完成,在操作某個(gè)文件時(shí),每調(diào)用一次write方法,寫入的數(shù)據(jù)就會(huì)追加到文件末尾。示例如下所示:
f = open('itheima.txt','w') f.write('hello itheima, i am here!') f.write('hello itheima, i am here!') f.write('hello itheima, i am here!')
注意:當(dāng)向文件寫入數(shù)據(jù)的時(shí)候,如果文件不存在,那么系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)文件并寫入數(shù)據(jù)。如果文件存在,那么會(huì)清空原來文件的數(shù)據(jù),重新寫入新的數(shù)據(jù)。
1.2 writelines向文件寫入一個(gè)字符串序列
f = open("test.txt","w",encoding="utf-8") f.writelines(["張三\n","李四\n","王五\n"])
2、讀文件 從文件中讀取數(shù)據(jù)時(shí),可以通過多種方式來獲取,具體如下。 2.1 使用read方法讀取文件 read方法可以從文件中讀取數(shù)據(jù),該方法的定義語法如下: read(size) 上述方法中,size表示要從文件中讀取的數(shù)據(jù)的長度,單位為字節(jié)。如果沒有指定size,那么就表示讀取文件的全部數(shù)據(jù)。
使用read方法讀取文件示例如下所示:
f = open('itheima.txt','r')
注意:多次讀取文件時(shí),每次讀取文件都會(huì)接著上次讀取的位置讀后面的數(shù)據(jù)。
2.2 使用readlines方法讀取文件 如文件的內(nèi)容很少,則可以使用readlines方法把整個(gè)文件中的內(nèi)容進(jìn)行一次性讀取。readlines方法會(huì)返回一個(gè)列表,列表中的每一個(gè)元素為文件中的每一行數(shù)據(jù)。假設(shè)文件“itheima.txt”里面有3行數(shù)據(jù)“hello itheima, i am here!”,那么,使用readlines方法讀取文件的方式如下所示:
f = open('itheima.txt','r')
2.3 使用readline方法一行一行讀取數(shù)據(jù)
同樣,以讀取itheima.txt文件為例,該文件包含了三行數(shù)據(jù),那么使用readline方法讀取文件內(nèi)容的方式如下所示:
f = open('itheima.txt','r')
思考題:
如果一個(gè)文件很大,如5GB,試想應(yīng)該怎么樣把文件的數(shù)據(jù)讀取到內(nèi)存然后進(jìn)行處理。
三、文件讀寫應(yīng)用--制作文件的備份 實(shí)際開發(fā)中,文件的讀寫可以完成很多功能,如文件的備份就是文件讀寫的過程。假設(shè),現(xiàn)在有一個(gè)文件“data.txt”,該文件存儲(chǔ)的數(shù)據(jù)如下所示:
If you were a teardrop;In my eye, For fear of losing you,I would never cry. And if the golden sun,Should cease to shine its light, Just one smile from you,Would make my whole world bright.
此時(shí),如果想制作data.txt的備份文件,則需要讀取原文件的數(shù)據(jù),并將獲取的數(shù)據(jù)寫入備份文件。接下來,通過代碼演示,如下所示:
oldFileName = input("Please enter the name of the file to be copied:") oldFile = open(oldFileName,'r') fileFlagNum = oldFileName.rfind('.') fileFlag = oldFileName[fileFlagNum:] newFileName = oldFileName[:fileFlagNum] + '[copy]' + fileFlag newFile = open(newFileName, 'w') for lineContent in oldFile.readlines(): newFile.write(lineContent)
四、文件的定位讀寫 通過前面的了解,文件的讀寫都是順序進(jìn)行的。但是在實(shí)際開發(fā)中,可能會(huì)需要從文件的某個(gè)特定位置開始讀寫,這時(shí),我們需要對(duì)文件的讀寫位置進(jìn)行定位,包括獲取文件 當(dāng)前的讀寫位置,以及定位到文件的指定讀寫位置。接下來詳細(xì)介紹這兩種定位方式。
1、使用tell方法來獲取文件當(dāng)前的讀寫位置 在讀寫文件的過程中,如果想知道當(dāng)前位置,可以使用tell方法獲取。tell方法返回文件的當(dāng)前位置,即文件指針當(dāng)前位置。
使用tell方法獲取文件當(dāng)前讀寫位置示例如下:
print('read data is :',str) print('The current position :',position) print('read data is :',str) print('The current position :',position) print('read data is :',str) print('The current position :',position)
2、使用seek方法定位到文件的指定位置
如果在讀取文件的過程中,需要從指定的位置開始讀寫操作,就可以使用seek方法實(shí)現(xiàn)。seek方法的定義語法如下: seek(offset[, whence]) seek方法的參數(shù)介紹如下所示: (1)offset:表示偏移量,也就是需要移動(dòng)的字節(jié)數(shù) (2)whence: 表示方向,該參數(shù)的值有三個(gè): SEEK_SET或者0,whence參數(shù)的默認(rèn)值,表示從文件的起始位置開始偏移 SEEK_CUR或者1,表示從文件當(dāng)前的位置開始偏移 SEEK_END或者2,表示從文件末尾開始偏移
使用seek方法獲取文件當(dāng)前讀寫位置示例如下:
print('read data is :',str) print('The current position :',position) print('The current position :',position)
五、文件的重命名和刪除 有些時(shí)候,需要對(duì)文件進(jìn)行重命名、刪除等一些操作,Python的OS模塊已經(jīng)默認(rèn)包含了這些功能,接下來,詳細(xì)介紹這些操作。
1、文件的重命名 OS模塊的rename方法可以實(shí)現(xiàn)完成對(duì)文件的重命名操作,格式如下: OS.rename(src,dst) 其中src指的是需要修改的文件名,dst指的是修改之后的新的文件名。 示例:
OS.rename('畢業(yè)論文.txt','畢業(yè)論文-最終版.txt')
2、文件的刪除 OS模塊的remove方法可以實(shí)現(xiàn)完成對(duì)文件的刪除操作,格式如下: OS.remove(path) path指的是指定路徑下的文件。
示例:
OS.remove('畢業(yè)論文.txt')
六、文件夾的相關(guān)操作 1、創(chuàng)建文件夾 OS模塊的mkdir方法用來創(chuàng)建文件夾,示例代碼如下所示:
2、獲取當(dāng)前目錄 OS模塊的getcwd方法用來獲取當(dāng)前的目錄,示例代碼如下所示:
3、改變默認(rèn)目錄 OS模塊的chdir方法用來改變默認(rèn)目錄,例如,將當(dāng)前目錄改為上一級(jí)目錄,代碼如下所示:
4、獲取目錄列表 OS模塊的listdir方法用來獲取目錄列表,例如,要獲取當(dāng)前路徑下的子目錄,代碼如下所示:
5、刪除空文件夾 OS模塊的rmdir方法用來刪除文件夾,例如,下面的代碼刪除了當(dāng)前路徑下的“wzb”目錄:
6、刪除非空文件夾
shutil.rmtree("d://testdir123")
|