完整版是:
open(file,mode=』r』,buffering=-1,encoding=none,errors=none,newline=none,closefd=true,opener=none)
用來開啟檔案, 根據引數來創造乙個檔案物件.
file: 必需,檔案路徑(相對或者絕對路徑)。
mode: 可選,檔案開啟模式
buffering: 設定緩衝
encoding: 一般使用utf8
errors: 報錯級別
newline: 區分換行符
closefd: 傳入的file引數型別
opener:
通過位置傳參, 沒有預設值, 所以是必須由我們輸入的引數.
可以寫相對路徑或者是絕對路徑, 就是開啟這個檔案.
f = open('d:/test.txt')
這個是以什麼模式來開啟這個檔案
mode 引數有:
模式描述
t文字模式 (預設)。
x寫模式,新建乙個檔案,如果該檔案已存在則會報錯。
b二進位制模式。
+開啟乙個檔案進行更新(可讀可寫)。
u通用換行模式(不推薦)。
r以唯讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。
rbr+
開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。
rb+w
開啟乙個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。
wbw+
開啟乙個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。
wb+a
開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
ab以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
a+開啟乙個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。
ab+以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。
這是引數只能在文字模式下使用, 可以把沒有被編碼的檔案內容, 按照encoding指定的編碼表來編碼.
windows系統下預設的編碼表gbk.
『utf8』和』utf-8』的意思是一樣的.
一般在開啟檔案的時候, 把encoding寫上, 是乙個好習慣.
先要宣告, 在操作檔案的時候, 有乙個指標的概念, 有點類似於word或者txt裡面的游標, 指標就是指明當前的位置在哪.
讀取檔案的內容, size控制讀取的字元個數或位元組個數;
讀完之後, 指標會指導尾部.
f=open('***.txt','r',encoding='utf8')
data=f.read(5)
給檔案新增一些文字, 『t』模式下寫字元, 『b』模式下寫位元組, 是在指標所在處往後寫, 會覆蓋後面的內容.
寫完返回寫入的字元數或者位元組數個數.
f=open(***x','w',encoding='utf8')
f.write()
關閉開啟的檔案, 檔案用完了一定要關閉, 不然檔案描述符不夠用.
f=open('***','r',encoding='utf8')
f.close()
注意是沒有括號的, 用來判斷這個檔案是否關閉.
關閉了返回true, 沒關閉返回false.
設定指標的位置;
whence的值, 0代表檔案開頭, 2代表檔案尾部, 1表示相對於當前位置.
pos是走多少步, 在文字模式下, 在1,2(也就是相對位置和尾部)不能走非0的pos, 就是不能動.
只有在位元組模式下, 才能從後往前走, 就是pos為負數.
seek()不允許在0, 就是開始位置, 把指標向左移動
檔案指標和字元無關, 指標每移動一步, 都是移動乙個位元組
文字模式, 讀寫操作的都是字元
位元組模式, 讀寫操作的都是位元組
f.seek(0)# 移動游標到指定的位置print(f.read(4))
檢視指標的位置, 是當前位置, 按位元組來數.
print(f.tell())# 取出游標位置print(f.read(2))print(f.tell())
一行一行的讀,
size控制讀幾個字元,
立即返回乙個列表
print(f.readline())print(f.readline())#無論是read()還是readline(),游標會發生位置變化
把所有行顯示出來,
放在乙個列表裡面,
hint控制讀幾行.
print(f.readlines())#['昨夜寒蛩不住鳴。\n', '驚回千里夢,已三更。\n', '起來獨自繞階行。\n', '人悄悄,簾外月朧明。\n', '白首為功名,舊山松竹老,阻歸程。\n', '欲將心事付瑤琴。\n', '知音少,弦斷有誰聽。']
#例項列印檔案
data=f.readlines()#注意及時關閉檔案f.close()
number = 0for i in data: number += 1
if number == 6: i = ''.join([i.strip(), 'iiiii']) # 取代萬惡的+ print(i.strip())f.close()
把列表補進去
列表內元素必須是str
\n得自己補上
檢視檔案物件的檔案描述符
還可以吧檔案物件直接看成乙個迭代器使用
number=0 for i in f:#這是for內部將f物件做成乙個迭代器,用一行去一行。 number+=1 if number == 6: i = ''.join([i.strip(), 'iiiii']) # 取代萬惡的+ print(i.strip()) print(i.strip())
with 同時管理多個檔案物件 with open('log1','r') as f_read, open('log2','w') as f_write: for line in f_read: f_write.write(line)
可以不用close()
ext:
1.進度條例項
#flush():同步吧將資料從快取轉移到磁碟上去##進度條例項
import sys,time
for i in range(30):
sys.stdout.write("*")
sys.stdout.flush()
time.sleep(0.1)
#print的flushimport sys,time
for i in range(30):
print('*',end='',flush=true)
time.sleep(0.1)
2.truncate()截斷函式
#truncate():截斷資料(不能在r模式下)
#在w模式下:先清空,再寫,再截斷
#在a模式下:直接將指定位置後的內容截斷 f.truncate(5) f.write('hello world') f.truncate(5) f.close()
3.終極問題 如何在磁碟修改檔案
# 常規思路,由於磁碟儲存機制不能完成 number=0 for line in f: number+=1 if number==3: f.write('alex')
#只能採取重新建立乙個檔案的思路 f_read=open('小重山','r',encoding='utf8') f_write = open('小重山2','w',encoding='utf8')
number=0 for line in f_read: number+=1 if number==5: line=''.join([line.strip(),'alex\n']) line='hello 岳飛\n' f_write.write(line)f_read.close() f_write.close()
4.關於python檔案編碼
收藏
Python之檔案操作
file open filename,mode mode預設為 r 例如file ope test.txt r 以讀的方式開啟檔案.檔案操作完畢記得關閉.file.close 其中,mode可以有以下選擇 檔案test.txt的內容為 11111111111 aaaaaaaaa 2222222222...
Python之檔案操作
使用open w 以寫入模式開啟,如果檔案存在將會刪除裡面的所有內容,然後開啟這個檔案進行寫入 a 以追加模式開啟,寫入到檔案中的任何資料將自動新增到末尾 fobj open home coder documents obama.txt 唯讀開啟 fobj fobj.close 關閉檔案 fobj ...
Python之檔案操作
建立目錄import os import errno defmkdir dir try os.makedirs dir except oserror as exc if exc.errno errno.eexist print the dir has been existed pass else r...