一、open()方法
python open()方法用于打開一個文件,并返回文件對象,在對文件處理的過程中都需要用到這個函數(shù),如果文件無法打開,會拋出OSError。
注意:使用open()方法的時候一定到保證關(guān)閉文件對象,文件里面的內(nèi)容才會被保存,關(guān)閉文件需要調(diào)用close()方法。
open()方法常用的形式是接收兩個參數(shù):文件名(file)和模式(mode)
基本語法:
open(file,mode='r')
完整的語法:
open(file,mode='r',buffering=1,encoding=None,errors=None,newline=None,closefd=True)
參數(shù)說明:
- file: 必須的,表示某個路徑下文件名(可以是相對路徑,也可以是絕對路徑)
- mode:可選參數(shù),文件打開的模式
- buffering: 設(shè)置緩沖
- encoding: 編碼,一般用utf8
- errors: 報(bào)錯級別
- newline:區(qū)分換行符
- closefd:傳入的file參數(shù)類型
mode表示文件打開模式,有幾種模式呢?參考如下:
- r: 以只讀的方式打開文件。文件的指針將會放到文件的開頭。這是文件默認(rèn)的打開模式
- w: 打開一個文件只能用于寫入。如果文件存在則打開文件,并且從頭開始編輯,文件原有的內(nèi)容會被清空。如果文件不存在,則會創(chuàng)建新的文件
- a: 打開一個文件用于在里面追加內(nèi)容。如果文件已經(jīng)存在,文件指針將會放在文件的結(jié)尾。也就是新的內(nèi)容會被寫道已有的內(nèi)容之后。如果該文件不存在的話,創(chuàng)建新文件進(jìn)行寫入
- r+:打開一個文件用于讀寫,文件指針將會放在文件的開頭
- a+: 打開一個文件用于讀寫,如果文件已經(jīng)存在,文件指針將會放在文件的結(jié)尾,文件打開時回事追加模式,如果該文件不存在,創(chuàng)建新的文件用于讀寫
- w+: 打開一個文件用于讀寫。如果該文件已經(jīng)存在,則打開已經(jīng)存在文件,并且從頭開始編輯,即原有的內(nèi)容會被刪除。如果該文件不存在,則創(chuàng)建新文件
- b: 二進(jìn)制文件
- rb:以二進(jìn)制格式打開一個文件用于只讀。文件指針將會放在文件的開頭。這是默認(rèn)的模式,一般用于非文本文件,如圖片,視頻等
- wb: 以二進(jìn)制格式打開一個文件只用于寫入。如果該文件已經(jīng)存在則打開文件,并從文件的開頭開始編輯,即原有的內(nèi)容會被刪除,如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件,如圖片,視頻等
- ab:以二進(jìn)制格式打開一個文件用于追加,如果該文件已經(jīng)存在,文件指針將會放在文件的結(jié)尾,也就是說,新的內(nèi)容將會被寫道已有的內(nèi)容之后,如果該文件不存在,則創(chuàng)建新的文件并寫入
- ab+:以二進(jìn)制格式打開一個文件用于追加,如果該文件已經(jīng)存在,文件指針將會放在文件的結(jié)尾,如果該文件不存在,創(chuàng)建新的文件用于讀寫
例1:以w模式打開文件
f = open('myfile.txt', 'w')
f.write('hello,world!')
f.close()
##輸出結(jié)果
在當(dāng)前路徑下成一個myfile.txt文件,并且把'hello world'寫到該文件
myfile.txt內(nèi)容如下:
hello,world!
例2: 以a模式打開文件
f=open('myfile.txt','a')
f.write('
good lucky')
f.close()
##輸出結(jié)果:
會在文件末尾追加內(nèi)容,不會覆蓋原來的內(nèi)容
myfile.txt內(nèi)容如下:
hello,world!
good,lucky!
例3: 再以w模式打開文件,會把原來內(nèi)容覆蓋掉
f = open('myfile.txt', 'w')
f.write('welcome!')
f.close()
##輸出內(nèi)容:
myfile.txt內(nèi)容如下:
welcome!
例4: 以r的模式讀文件
f = open('myfile.txt', 'r') #以r模式讀文件,再往里面write會報(bào)錯
f.write('
hello!')
f.close()
## 輸出內(nèi)容:
f.write('
hello!')
io.UnsupportedOperation: not writable
例5: 以r+的模式讀文件
f = open('myfile.txt', 'r+')
f.write('
hello!')
f.close()
##輸出結(jié)果
r+:打開一個文件用于讀寫,文件指針將會放在文件的開頭
myfile.txt內(nèi)容:
1--------------> 此處表示空行
2hello!
例6: 以w+模式寫文件
f = open('myfile.txt', 'w+')
f.write('love!')
f.close()
##輸出結(jié)果:
如果該文件已經(jīng)存在,則打開已經(jīng)存在文件,并且從頭開始編輯,即原有的內(nèi)容會被刪除。如果該文件不存在,則創(chuàng)建新文件。
myfile.txt內(nèi)容:
love!
二、read()方法
讀取文件中的所有內(nèi)容,讀取之后光標(biāo)移動到文件末尾。 必須以r或r+模式,才可以使用read()。
例7: 以w+模式寫文件,再以r+模式來讀取文件內(nèi)容
f = open('myfile.txt', 'w+')
f.write('hello,world!
good,lucky!!')
f.close()
##輸出結(jié)果:
w+ 如果該文件已經(jīng)存在,則打開已經(jīng)存在文件,并且從頭開始編輯,即原有的內(nèi)容會被刪除。如果該文件不存在,則創(chuàng)建新文件。
myfile.txt內(nèi)容:
hello,world!
good,lucky!!
f = open('myfile.txt', 'r+') #
print(f.read())
##輸出結(jié)果:
hello,world!
good,lucky!!
例8:以r+模式寫文件,再來讀取文件
f = open('myfile.txt', 'r+') #以r+的模式,會將文件指針放在開頭,然后將指定字符替換掉文件中原來的字符
f.write('
welcom')
print(f.read())
##輸出結(jié)果:
rld!
good,lucky!!
#myfile.txt內(nèi)容如下:
1----------->空行
2welcomrld!
3good,lucky!!
三、readlines()方法
readlines()一行行讀文件
例9:
f = open('myfile.txt', 'r+')
print(f.readline())
print(f.readline())
print(f.readline())
##輸出結(jié)果
welcomrld!
good,lucky!!
readlines()
一行行讀取文件內(nèi)容,然后存放在列表中,可以讀取所有行的內(nèi)容,每行的內(nèi)容都作為列表中的一個元素存在列表里,并且返回一個列表。 這個列表可以使用for..in 結(jié)構(gòu)進(jìn)行處理。 如果碰到EOF結(jié)束符,則返回空字符。
例10:
f = open('myfile.txt', 'r')
print(f.readlines())
##輸出內(nèi)容:
['
', 'welcomrld!
', 'good,lucky!!']
f = open('myfile.txt', 'r')
for i in f.readlines():
i = i.strip() # 去掉空格,如
換行符
print(i)
##輸出內(nèi)容:
----------->空行
welcomrld!
good,lucky!!
四、seek()方法
seek() 用于移動文件讀取指針到指定位置
語法如下:f.seek(offset,[,whence]) offset--開始的偏移量,也就是代表需要移動偏移的字節(jié)數(shù),如果是負(fù)數(shù),表示從倒數(shù)第幾位開始 whence--可選參數(shù),默認(rèn)是0。給offset定義一個參數(shù),表示從哪個位置開始偏移;0代表從文件開頭算起;1代表從當(dāng)前位置開始算起;2代表從文件末尾算起。 如果操作成功,則返回新的文件位置;如果操作失敗,返回-1
例11:
f = open('workfile.txt', 'wb+')
print(f.write(b'0123456789abcde'))
f.seek(5)
print(f.read(1))
f.seek(-3,2)
print(f.read(1))
##輸出結(jié)果:
15
b'5'
b'c'
workfile.txt內(nèi)容如下:
0123456789abcde
例12:
f = open('myfile.txt', 'r')
print('filename is :',f.name)
line=f.readline().strip() ##去掉
print('第一次讀取的數(shù)據(jù)是%s' % (line))
f.seek(0, 0) ##第一個0表示偏移量為0,第二個0表示從文件頭開始偏移
line=f.readline().strip()
print('第二次讀取的數(shù)據(jù)是%s' % (line))
##輸出內(nèi)容:
filename is : myfile.txt
第一次讀取的數(shù)據(jù)是good,lucky!!
第二次讀取的數(shù)據(jù)是good,lucky!!
myfile.txt內(nèi)容如下:
good,lucky!!
##去掉 f.seek(0, 0),運(yùn)行結(jié)果如下:
f = open('myfile.txt', 'r')
print('filename is :',f.name)
line=f.readline().strip()
print('第一次讀取的數(shù)據(jù)是%s' % (line))
line=f.readline().strip()
print('第二次讀取的數(shù)據(jù)是%s' % (line))
##運(yùn)行結(jié)果如下:
filename is : myfile.txt
第一次讀取的數(shù)據(jù)是good,lucky!!
第二次讀取的數(shù)據(jù)是
##去掉 f.seek(0, 0),運(yùn)行結(jié)果如下:
f = open('myfile.txt', 'r')
print('filename is :',f.name)
line=f.readline().strip()
print('第一次讀取的數(shù)據(jù)是%s' % (line))
line=f.readline().strip()
print('第二次讀取的數(shù)據(jù)是%s' % (line))
##運(yùn)行結(jié)果如下:
filename is : myfile.txt
第一次讀取的數(shù)據(jù)是good,lucky!!
第二次讀取的數(shù)據(jù)是
五、tell()函數(shù)
返回文件的當(dāng)前位置
f = open('myfile.txt', 'r+')
print('filename is :', f.name)
line=f.readline()
print('讀取的數(shù)據(jù)是%s' % (line))
line1=f.readline()
print('讀取的數(shù)據(jù)是%s' % (line1))
pos=f.tell()
print('current position is %d:' % (pos) )
f.close()
##輸出結(jié)果
filename is : myfile.txt
讀取的數(shù)據(jù)是good,lucky!!
讀取的數(shù)據(jù)是
current position is 12:
myfile.txt內(nèi)容如下:
good,lucky!!
##輸出結(jié)果
filename is : myfile.txt
讀取的數(shù)據(jù)是good,lucky!!
讀取的數(shù)據(jù)是g
current position is 15:
myfile.txt內(nèi)容如下:
good,lucky!!
g
小結(jié)
到此這篇python怎么操作文件的文章就介紹到這了,更多相關(guān)python文件處理內(nèi)容請搜索W3Cschool以前的文章或繼續(xù)瀏覽下面的相關(guān)文章。