1. open()語(yǔ)法
open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])
open函數(shù)有很多的參數(shù),常用的是file,mode和encoding
file
文件位置,需要加引號(hào)
mode
文件打開(kāi)模式,見(jiàn)下面3
buffering
的可取值有0,1,>1三個(gè),0代表buffer關(guān)閉(只適用于二進(jìn)制模式),1代表line buffer(只適用于文本模式),>1表示初始化的buffer大小;
encoding
表示的是返回的數(shù)據(jù)采用何種編碼,一般采用utf8或者gbk;
errors
的取值一般有strict,ignore,當(dāng)取strict的時(shí)候,字符編碼出現(xiàn)問(wèn)題的時(shí)候,會(huì)報(bào)錯(cuò),當(dāng)取ignore的時(shí)候,編碼出現(xiàn)問(wèn)題,程序會(huì)忽略而過(guò),繼續(xù)執(zhí)行下面的程序。
newline
可以取的值有None, \n, \r, ”, ‘\r\n',用于區(qū)分換行符,但是這個(gè)參數(shù)只對(duì)文本模式有效;
closefd
的取值,是與傳入的文件參數(shù)有關(guān),默認(rèn)情況下為T(mén)rue,傳入的file參數(shù)為文件的文件名,取值為False的時(shí)候,file只能是文件描述符,什么是文件描述符,就是一個(gè)非負(fù)整數(shù),在Unix內(nèi)核的系統(tǒng)中,打開(kāi)一個(gè)文件,便會(huì)返回一個(gè)文件描述符。
2.
Python
中file()與open()區(qū)別
兩者都能夠打開(kāi)文件,對(duì)文件進(jìn)行操作,也具有相似的用法和參數(shù),但是,這兩種文件打開(kāi)方式有本質(zhì)的區(qū)別,
file為文件類(lèi)
,用file()來(lái)打開(kāi)文件
,相當(dāng)于這是在構(gòu)造文件類(lèi),而用open()打開(kāi)文件,是用
python的內(nèi)建函數(shù)來(lái)操作
,建議使用open
3. 參數(shù)mode的基本取值
| Character | Meaning |
| ‘r' | open for reading (default) |
| ‘w' | open for writing, truncating the file first |
| ‘a(chǎn)' | open for writing, appending to the end of the file if it exists |
| ‘b' | binary mode |
| ‘t' | text mode (default) |
| ‘+' | open a disk file for updating (reading and writing) |
| ‘U' | universal newline mode (for backwards compatibility; should not be used in new code) |
r、w、a為打開(kāi)文件的基本模式,對(duì)應(yīng)著只讀、只寫(xiě)、追加模式;
b、t、+、U這四個(gè)字符,與以上的文件打開(kāi)模式組合使用,二進(jìn)制模式,文本模式,讀寫(xiě)模式、通用換行符,根據(jù)實(shí)際情況組合使用、
常見(jiàn)的mode取值組合
r或rt 默認(rèn)模式,文本模式讀
rb 二進(jìn)制文件
w或wt 文本模式寫(xiě),打開(kāi)前文件存儲(chǔ)被清空
wb 二進(jìn)制寫(xiě),文件存儲(chǔ)同樣被清空
a 追加模式,只能寫(xiě)在文件末尾
a+ 可讀寫(xiě)模式,寫(xiě)只能寫(xiě)在文件末尾
w+ 可讀寫(xiě),與a+的區(qū)別是要清空文件內(nèi)容
r+ 可讀寫(xiě),與a+的區(qū)別是可以寫(xiě)到文件任何位置
4. 測(cè)試
測(cè)試文件test.txt,內(nèi)容如下:
Hello,Python
www.jb51.net
This is a test file
用一小段代碼來(lái)測(cè)試寫(xiě)入文件直觀的顯示它們的不同
test = [ "test1\n", "test2\n", "test3\n" ]
f = open("test.txt", "a+")
try:
#f.seek(0)
for l in test:
f.write(l)
finally:
f.close()
a+、w+和r+模式的區(qū)別
(測(cè)試后還原test.txt)
a+模式
# cat test.txt
Hello, Python
www.jb51.net
This is a test file
test1
test2
test3
w+模式
# cat test.txt
test1
test2
test3
r+模式
在寫(xiě)入文件前,我們?cè)谏厦婺嵌未a中加上一句f.seek(0),用來(lái)定位寫(xiě)入文件寫(xiě)入位置(文件開(kāi)頭),直接覆蓋字符數(shù)(注意\n也是一個(gè)字符)
# cat test.txt
test1
test2
test3
inuxeye.com
This is a test file
注意:r+模式打開(kāi)文件時(shí),此文件必須存在,否則就會(huì)報(bào)錯(cuò),‘r'模式也如此
其他測(cè)試
>>> f = open('test.txt')
>>> f.read() #讀取整個(gè)文件,字符串顯示
'Hello,Python\nwww.jb51.net\nThis is a test file\n'
>>> f.read() #指針在文件末尾,不能再讀取內(nèi)容
''
>>> f = open('test.txt')
>>> f.readline() #一次讀一行,指針在該行末尾
'Hello,Python\n'
>>> f.tell() #改行的字符長(zhǎng)度
13
>>> f.readline()
'www.jb51.net\n'
>>> f.tell()
30
>>> f.readline()
'This is a test file\n'
>>> f.tell()
50
>>> f.readline()
''
>>> f.tell() #指針停在最后一行
50
>>> f = open('test.txt')
>>> f.readlines() #讀取整個(gè)文件,以列表顯示
['Hello,Python\n', 'www.jb51.net\n', 'This is a test file\n']
>>> f.tell() #指針在最后一行
50
>>> f = open('test.txt','w') #覆蓋創(chuàng)建新文件
>>> f.write('Hello,Python!') #如果寫(xiě)入內(nèi)容小于1024,會(huì)存在內(nèi)存,否則需要刷新
>>> f.flush() #寫(xiě)入到硬盤(pán)
>>> f.close() #關(guān)閉文件會(huì)自動(dòng)刷新
>>> f.write('Hello,Linuxeye') #關(guān)閉后,寫(xiě)失敗,提示文件已經(jīng)關(guān)閉
Traceback (most recent call last):
File "
", line 1, in
ValueError: I/O operation on closed file
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

