我們在前面的學習中,不管是學習哪種數(shù)據(jù)類型的操作,當我們在程序測試的時候使用的數(shù)據(jù)都沒有進行保存,如果我們要統(tǒng)計分析數(shù)據(jù)的相關(guān)性,那么我們就需要將數(shù)據(jù)保存到本地文件中,在Python中提供了訪問文件、訪問目錄、讀取文件和寫入文件的操作,Python的文件對象也被稱為類似文件對象或者流,本節(jié)我們先進行文件操作的相關(guān)學習。
1. 創(chuàng)建和打開文件
我們在創(chuàng)建或者打開文件的時候需要使用到open()函數(shù),它的語法結(jié)構(gòu)為:
file=open(filename,mode=’r’,buffering=-1,encoding=None,errors=None,newline=None,closefd=True, openr=None)
在這些參數(shù)里,我們常用到的有filname和mode,其余的參數(shù)大家可以作簡單的了解。
1) filename
filename為要被創(chuàng)建或者打開的文件,使用單引號或者雙引號,如果和當前文件在同一文件夾下,可直接寫文件的名字,如果不在則要輸入絕對路徑。
2) mode
mode為參數(shù)的設(shè)置模式,指定了文件的打開方式,默認打開方式為只讀(r),常用的mode參數(shù)有r、rb、wb、xb、ab和rt、wt、xt、at,分別對應(yīng)了二進制文件和文本文件,在使用的時候t可以省略。
3) buffering
可選參數(shù),可以設(shè)置緩沖模式,如果為-1則自動設(shè)置緩沖區(qū),通常為4096或8192個字節(jié),如果為0則關(guān)閉緩沖區(qū)直接寫入文件中。
4) Encoding和errors
前者為打開文件的編碼方式,后置指定編碼錯誤的時候處理方式。
5) newline
換行方式。
6) closefd
文件描述時使用。
7) opener
文件描述時使用。
我們通過例子來創(chuàng)建一個文件。
file = open('test.txt','w') file.write('第一次寫入') file = open('test.txt','r+') file.write('第二次寫入覆蓋第一次寫入')
此時我們可以發(fā)現(xiàn)在當前目錄下多了一個test.txt的文件,我們打開它。
我們可以發(fā)現(xiàn)文本中的內(nèi)容為我們第二次寫入的內(nèi)容,因為第一次我們是創(chuàng)建了這個文件,然后第二次我們再次打開這個文件,打開方式為可覆蓋的方式,第二次我們寫入的內(nèi)容也就覆蓋了我們第一次寫入的內(nèi)容,下面表格中統(tǒng)計了常用的打開方式。
參數(shù) | 方式 | 文件 |
r | 只讀模式 | 需存在 |
rb | 二進制格式(打開)、只讀模式 | 需存在 |
R+ | 可讀可寫入模式,覆蓋當前文本內(nèi)容 | 需存在 |
rb+ | 二進制格式(打開)、讀寫模式 | 需存中 |
w | 只讀模式 | 存在則覆蓋,不存在新建 |
wb | 二進制格式(打開)、只讀模式 | 存在則覆蓋,不存在新建 |
w | 先清空文件,然后可讀寫 | 存在則覆蓋,不存在新建 |
wb+ | 二進制格式(打開)、讀寫模式 | 存在則覆蓋,不存在新建 |
a | 追加模式打開文件,在文件末尾可寫入 | |
ab | 二進制格式(打開)、后同上 | |
a+ | 以讀寫模式打開、末尾追加 | |
ab+ | 二進制格式(打開)、后同上 |
我們在通過一個例子來看一下追加模式。
代碼如下:
file = open('test.txt','w') file.write('第一次寫入。') print(file) file = open('test.txt','a+') file.write('第二次追加寫入。') print(file)
文件內(nèi)容為:
第一次寫入。第二次追加寫入。
輸出結(jié)果為二進制格式:
<_io.TextIOWrapper name='test.txt' mode='w' encoding='cp936'> <_io.TextIOWrapper name='test.txt' mode='a+' encoding='cp936'>
2. 關(guān)閉文件
我們可以在寫入之后需要文件關(guān)閉掉,以保證文件中的內(nèi)容不被惡意插件修改,關(guān)閉的方式為:
file.close()
在文件使用的末尾添加即可。
3. 總結(jié)
關(guān)于文件的創(chuàng)建和打開,我們一定要注意它的打開或者創(chuàng)建方式,這點對我們后續(xù)的文件操作十分重要,下一節(jié)我們學習文件的讀取。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學奧賽或C++選手的 必學C++課程
藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導(dǎo)課程