一、打開文件
- 開一個(gè)文件用
open()
方法衍腥,返回一個(gè)文件對(duì)象磺樱,它是可迭代的。 - 一般情況下紧阔,我們使用
open()
方法坊罢,只需要傳入文件名
和打開方式
即可。 - 如果打開的文件編碼方式不是
'utf-8'
擅耽,比如是'gbk'
活孩,我們也可以傳入encoding='gbk'
參數(shù)。
f = open('test.txt', 'r', encoding='utf-8')
打開文件并且讀寫完成之后乖仇,我們記得一定要使用
f.close()
關(guān)閉憾儒。如果我們使用with open('/path/to/file', 'r') as f:
語(yǔ)法來(lái)打開,則不需要額外關(guān)閉文件乃沙,下面的讀取和寫入文件都采用這種語(yǔ)法起趾。open()
方法的打開方式
參數(shù)
參數(shù) | 參數(shù)說(shuō)明 |
---|---|
r |
讀 |
w |
寫 |
a |
追加 |
r+ |
可讀可寫,文件若不存在就報(bào)錯(cuò)(IOError) |
r+w |
同上 |
w+ |
可讀可寫警儒,文件若不存在就創(chuàng)建 |
w+r |
同上 |
a+ |
可追加可寫训裆,文件若不存在就創(chuàng)建 |
a+r |
同上 |
- 備注:對(duì)應(yīng)的,如果是二進(jìn)制文件蜀铲,就都加一個(gè)b就好了:
rb
边琉、wb
、ab
记劝、rb+
变姨、wb+
、wb+
二厌丑、讀取文件
- python文件對(duì)象提供了三個(gè)“讀”方法:
read()
定欧、readline()
和readlines()
。每種方法可以接受一個(gè)變量以限制每次讀取的數(shù)據(jù)量怒竿。-
read()
每次讀取整個(gè)文件砍鸠,它通常用于將文件內(nèi)容放到一個(gè)字符串變量中。如果文件大于可用內(nèi)存愧口,為了保險(xiǎn)起見睦番,可以反復(fù)調(diào)用read(size)
方法,每次最多讀取size個(gè)字節(jié)的內(nèi)容。 -
readlines()
之間的差異是后者一次讀取整個(gè)文件托嚣,像read()
一樣巩检。readlines()
自動(dòng)將文件內(nèi)容分析成一個(gè)行的列表,該列表可以由 Python 的for ... in ...
結(jié)構(gòu)進(jìn)行處理示启。 -
readline()
每次只讀取一行兢哭,通常比readlines()
慢得多。僅當(dāng)沒(méi)有足夠內(nèi)存可以一次讀取整個(gè)文件時(shí)夫嗓,才應(yīng)該使用readline()
迟螺。
-
with open('test1.txt', 'r') as f:
list = f.read()
二、寫入文件
- 寫文件和讀文件是一樣的舍咖,唯一區(qū)別是調(diào)用
open()
函數(shù)時(shí)矩父,傳入標(biāo)識(shí)符'w'
或者'wb'
表示寫文本文件或?qū)懚M(jìn)制文件 - 在寫入文件的時(shí)候,如果沒(méi)有這個(gè)文件排霉,就創(chuàng)建一個(gè)窍株;如果有,那么就會(huì)先把原文件的內(nèi)容清空再寫入新的東西攻柠。所以若不想清空原來(lái)的內(nèi)容而是直接在后面追加新的內(nèi)容球订,就用
'a'
這個(gè)模式。 - python文件對(duì)象提供了兩個(gè)“寫”方法:
write()
和writelines()
-
write()
方法和read()
瑰钮、readline()
方法對(duì)應(yīng)冒滩,是將字符串寫入到文件中。 -
writelines()
方法和readlines()
方法對(duì)應(yīng)浪谴,也是針對(duì)列表的操作开睡。它接收一個(gè)字符串列表作為參數(shù),將他們寫入到文件中苟耻,換行符不會(huì)自動(dòng)的加入士八,因此,需要顯式的加入換行符梁呈。
-
with open('test.txt', 'w') as f:
f.write('Hello, world!')