創(chuàng)建文本流的最簡單方法是使用?open()弦疮,可以選擇指定編碼:
f=open("myfile.txt","r",encoding="utf-8")
但是更為安全的方法是:
with?open("myfile.txt","w",encoding="utf-8") as f:
? ? ?f.write(str)
還可以設(shè)置open函數(shù)的mode:
mode?可以為?'r',?'w',?'x'?或?'a'?分別表示讀瓤Α(默認(rèn)模式)、寫入憔杨、獨占新建或添加旨巷。 如果以寫入或添加模式('w'和‘a(chǎn)’)打開的文件如果不存在將自動新建;當(dāng)以寫入模式(“w”)打開時會先把文件先清空欣鳖。 以新建模式打開時如果文件已存在則將引發(fā)?FileExistsError。 以新建模式打開文件也意味著要寫入茴厉,因此該模式的行為與?'w'?類似泽台。 在模式中附帶?'+'?將允許同時讀取和寫入。
示例:
如果要往一個文件中連續(xù)寫入內(nèi)容矾缓,設(shè)置可以為:
(這是從子進程讀取管道輸出并寫到log文件中的部分程序)
while subproc.returncode is None:
? ? ? ? out = subproc.stdout.readline()? #這個readline函數(shù)每次讀取一行
? ? ? ? if out:
? ? ? ? ? ? # print(out)
? ? ? ? ? ? with open(r"XXX\XXX\test_1.log", mode='a',encoding="UTF-8") as f:??
? ? ? ? ? ? ? ? f.write(str(out))
? ? ? ? else:
? ? ? ? ? ? break? #如果沒有輸出了怀酷,退出
? ? f.close()? #寫入結(jié)束之后記得要關(guān)閉文件
解讀:
with open(r"XXX\XXX\test_1.log",?mode='a',encoding="UTF-8") as f:
?此處打開一個文件,需要指定路徑和文件名嗜闻,此處mode是a蜕依,則寫入的內(nèi)容會先后添加進去,最后寫到test_1.log中的內(nèi)容為stdout的所有輸出和原來test_1.log保存的內(nèi)容琉雳,因為a模式在寫入之前不會清test_1.log样眠。
但如果設(shè)置為:
with open(r"XXX\XXX\test_1.log",?mode='w',encoding="UTF-8") as f:
這樣以上的程序?qū)懙絫est_1.log的文件只有stdout輸出的最后一行輸出,因為w模式每次寫入都會先去清test_1.log的內(nèi)容咐吼。