門(mén)戶網(wǎng)站的建設(shè)思路百度網(wǎng)站排名怎么提高
文件
打開(kāi)文件
函數(shù)open的參數(shù)mode的最常見(jiàn)取值
值 | 描述 |
---|---|
‘r’ | 讀取模式(默認(rèn)值) |
‘w’ | 寫(xiě)入模式 |
‘x’ | 獨(dú)占寫(xiě)入模式 |
‘a(chǎn)’ | 附加模式 |
‘b’ | 二進(jìn)制模式(與其他模式結(jié)合使用) |
‘t’ | 文本模式(默認(rèn)值,與其他模式結(jié)合使用) |
‘+’ | 讀寫(xiě)模式(與其他模式結(jié)合使用) |
- 顯式地指定讀取模式的效果與根本不指定模式相同
- 寫(xiě)入模式讓你能夠?qū)懭胛募?#xff0c;并在文件不存在時(shí)創(chuàng)建它
- 獨(dú)占寫(xiě)入模式更進(jìn)一步,在文件已存在時(shí)引發(fā)FileExistsError異常
- 在寫(xiě)入模式下打開(kāi)文件時(shí),既有內(nèi)容將被刪除(截?cái)?#xff09;,并從文件開(kāi)頭處開(kāi)始寫(xiě)入;如果要在既有文件末尾繼續(xù)寫(xiě)入,可使用附加模式
文件的基本方法
- 讀取和寫(xiě)入
>>> f = open('somefile.txt', 'w')
>>> f.write('Hello, ')
7
>>> f.write('World!')
6
>>> f.close()>>> f = open('somefile.txt', 'r')
>>> f.read(4)
'Hell'
>>> f.read()
'o, World!'
PS:
隨機(jī)存取
- seek seek(offset[, whence])將當(dāng)前位置(執(zhí)行讀取或?qū)懭氲奈恢?#xff09;移到 offset 和whence 指定的地方
- tell 返回當(dāng)前位于文件的什么位置
- 使用管道重定向輸出
$ cat somefile.txt | python somescript.py | sort
- 讀取和寫(xiě)入行
- readline 成行地讀取,也可提供一個(gè)非負(fù)整數(shù),指定readline最多可讀取多少個(gè)字符
- readlines 讀取文件中所有行
- writelines 接受一個(gè)字符串列表(實(shí)際上,可以是任何序列或可迭代對(duì)象),并將這些字符串都寫(xiě)入到文件(或流)中
PS:
沒(méi)有writeline,可以使用write
- 關(guān)閉文件
- close 將文件關(guān)閉
- flush 重置緩沖,讓所做的修改反映到磁盤(pán)文件中
PS:根據(jù)使用的操作系統(tǒng)和設(shè)置,flush可能出于鎖定考慮而禁止其他正在運(yùn)行的程序訪問(wèn)這個(gè)文件
# try/finally
# 在這里打開(kāi)文件
try: # 將數(shù)據(jù)寫(xiě)入到文件中
finally: file.close()# with
with open("somefile.txt") as somefile: do_something(somefile)
迭代文件內(nèi)容
- 每次一個(gè)字符(或字節(jié))
with open(filename) as f: while True:char = f.read(1) if not char: break process(char)
- 每次一行
with open(filename) as f: while True: line = f.readline() if not line: break process(line)
- 讀取所有內(nèi)容(文件不太大時(shí))
# 使用read迭代字符
with open(filename) as f: for char in f.read(): process(char)# 使用readlines迭代行
with open(filename) as f: for line in f.readlines(): process(line)
- 使用fileinput實(shí)現(xiàn)延遲行迭代
# 只讀取實(shí)際需要的文本部分,或使用while循環(huán)和readline結(jié)合
import fileinput
for line in fileinput.input(filename): process(line)
- 文本迭代器
with open(filename) as f: for line in f: process(line)
小結(jié)
類(lèi)似于文件的對(duì)象:類(lèi)似于文件的對(duì)象是支持read和readline(可能還有write和writelines)等方法的對(duì)象。
打開(kāi)和關(guān)閉文件:要打開(kāi)文件,可使用函數(shù)open,并向它提供一個(gè)文件名。如果要確保即便發(fā)生錯(cuò)誤時(shí)文件也將被關(guān)閉,可使用with語(yǔ)句。
模式和文件類(lèi)型:打開(kāi)文件時(shí),還可指定模式,如’r’(讀取模式)或’w’(寫(xiě)入模式)。通過(guò)在模式后面加上’b’,可將文件作為二進(jìn)制文件打開(kāi),并關(guān)閉Unicode編碼和換行符替換。
標(biāo)準(zhǔn)流:三個(gè)標(biāo)準(zhǔn)流(模塊sys中的stdin、stdout和stderr)都是類(lèi)似于文件的對(duì)象,它們實(shí)現(xiàn)了UNIX標(biāo)準(zhǔn)I/O機(jī)制(Windows也提供了這種機(jī)制)。
讀取和寫(xiě)入:要從文件或類(lèi)似于文件的對(duì)象中讀取,可使用方法read;要執(zhí)行寫(xiě)入操作,可使用方法write。
讀取和寫(xiě)入行:要從文件中讀取行,可使用readline和readlines;要寫(xiě)入行,可使用writelines。
迭代文件內(nèi)容:迭代文件內(nèi)容的方法很多,其中最常見(jiàn)的是迭代文本文件中的行,這可通過(guò)簡(jiǎn)單地對(duì)文件本身進(jìn)行迭代來(lái)做到。還有其他與較舊Python版本兼容的方法,如使用readlines。