Python open()文件處理使用介紹
1. open()語法
open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])
open函數(shù)有很多的參數(shù),常用的是file,mode和encoding
file文件位置,需要加引號(hào)
mode文件打開模式,見下面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)問題的時(shí)候,會(huì)報(bào)錯(cuò),當(dāng)取ignore的時(shí)候,編碼出現(xiàn)問題,程序會(huì)忽略而過,繼續(xù)執(zhí)行下面的程序。
newline可以取的值有None, \n, \r, ”, ‘\r\n',用于區(qū)分換行符,但是這個(gè)參數(shù)只對(duì)文本模式有效;
closefd的取值,是與傳入的文件參數(shù)有關(guān),默認(rèn)情況下為True,傳入的file參數(shù)為文件的文件名,取值為False的時(shí)候,file只能是文件描述符,什么是文件描述符,就是一個(gè)非負(fù)整數(shù),在Unix內(nèi)核的系統(tǒng)中,打開一個(gè)文件,便會(huì)返回一個(gè)文件描述符。
2. Python中file()與open()區(qū)別
兩者都能夠打開文件,對(duì)文件進(jìn)行操作,也具有相似的用法和參數(shù),但是,這兩種文件打開方式有本質(zhì)的區(qū)別,file為文件類,用file()來打開文件,相當(dāng)于這是在構(gòu)造文件類,而用open()打開文件,是用python的內(nèi)建函數(shù)來操作,建議使用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為打開文件的基本模式,對(duì)應(yīng)著只讀、只寫、追加模式;
b、t、+、U這四個(gè)字符,與以上的文件打開模式組合使用,二進(jìn)制模式,文本模式,讀寫模式、通用換行符,根據(jù)實(shí)際情況組合使用、
常見的mode取值組合
r或rt 默認(rèn)模式,文本模式讀 rb 二進(jìn)制文件 w或wt 文本模式寫,打開前文件存儲(chǔ)被清空 wb 二進(jìn)制寫,文件存儲(chǔ)同樣被清空 a 追加模式,只能寫在文件末尾 a+ 可讀寫模式,寫只能寫在文件末尾 w+ 可讀寫,與a+的區(qū)別是要清空文件內(nèi)容 r+ 可讀寫,與a+的區(qū)別是可以寫到文件任何位置
4. 測(cè)試
測(cè)試文件test.txt,內(nèi)容如下:
Hello,Python www.dbjr.com.cn This is a test file
用一小段代碼來測(cè)試寫入文件直觀的顯示它們的不同
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.dbjr.com.cn This is a test file test1 test2 test3
w+模式
# cat test.txt test1 test2 test3
r+模式
在寫入文件前,我們?cè)谏厦婺嵌未a中加上一句f.seek(0),用來定位寫入文件寫入位置(文件開頭),直接覆蓋字符數(shù)(注意\n也是一個(gè)字符)
# cat test.txt test1 test2 test3 inuxeye.com This is a test file
注意:r+模式打開文件時(shí),此文件必須存在,否則就會(huì)報(bào)錯(cuò),‘r'模式也如此
其他測(cè)試
>>> f = open('test.txt') >>> f.read() #讀取整個(gè)文件,字符串顯示 'Hello,Python\nwww.dbjr.com.cn\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.dbjr.com.cn\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.dbjr.com.cn\n', 'This is a test file\n'] >>> f.tell() #指針在最后一行 50
>>> f = open('test.txt','w') #覆蓋創(chuàng)建新文件 >>> f.write('Hello,Python!') #如果寫入內(nèi)容小于1024,會(huì)存在內(nèi)存,否則需要刷新 >>> f.flush() #寫入到硬盤 >>> f.close() #關(guān)閉文件會(huì)自動(dòng)刷新 >>> f.write('Hello,Linuxeye') #關(guān)閉后,寫失敗,提示文件已經(jīng)關(guān)閉 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: I/O operation on closed file
相關(guān)文章
python selenium自動(dòng)化測(cè)試框架搭建的方法步驟
這篇文章主要介紹了python selenium自動(dòng)化測(cè)試框架搭建的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03python3 tkinter實(shí)現(xiàn)點(diǎn)擊一個(gè)按鈕跳出另一個(gè)窗口的方法
今天小編就為大家分享一篇python3 tkinter實(shí)現(xiàn)點(diǎn)擊一個(gè)按鈕跳出另一個(gè)窗口的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06如何修改pycharm使用anaconda環(huán)境后的pip install安裝路徑問題
本文主要介紹了如何修改pycharm使用anaconda環(huán)境后的pip install安裝路徑問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Python 讀取千萬級(jí)數(shù)據(jù)自動(dòng)寫入 MySQL 數(shù)據(jù)庫
這篇文章主要介紹了Python 讀取千萬級(jí)數(shù)據(jù)自動(dòng)寫入 MySQL 數(shù)據(jù)庫,本篇文章會(huì)給大家系統(tǒng)的分享千萬級(jí)數(shù)據(jù)如何寫入到 mysql,分為兩個(gè)場(chǎng)景,兩種方式2022-06-06在linux下實(shí)現(xiàn) python 監(jiān)控usb設(shè)備信號(hào)
今天小編就為大家分享一篇在linux下實(shí)現(xiàn) python 監(jiān)控usb設(shè)備信號(hào),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07python實(shí)現(xiàn)比對(duì)美團(tuán)接口返回?cái)?shù)據(jù)和本地mongo數(shù)據(jù)是否一致示例
這篇文章主要介紹了python實(shí)現(xiàn)比對(duì)美團(tuán)接口返回?cái)?shù)據(jù)和本地mongo數(shù)據(jù)是否一致,涉及Python基于requests模塊的數(shù)據(jù)請(qǐng)求與比較運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2019-08-08