路徑、開啟方式、編碼格式。不標註開啟方式預設為唯讀。
f1 = open('d:\a.txt', encoding='utf-8', mode='r')
f1 為檔案控制代碼,也叫檔案物件,所有的讀寫操作都是通過檔案控制代碼完成的
生成檔案控制代碼
檔案的讀/寫,檔案寫操作必須以寫形式開啟檔案,檔案讀操作必須以讀或讀寫操作開啟檔案
關閉檔案控制代碼(若不關閉,則占用記憶體資源)
read #整個檔案內容全部讀取到記憶體中去,形成乙個字串
f1 = open('d:\a.txt
', encoding='
utf-8
', mode='r'
) content =f1.read()
(content)
f1.close()
read(n) #按照指定的位元組數或字元數讀取
log 檔案中內容為:我愛你中國當檔案以r模式開啟,n表示字元個數
f1 = open('
log',encoding='
utf-8
',mode='r'
)content = f1.read(3)
(content,type(content))
我愛你
'str
'>
f1.close()
當檔案以rb 模式代開,n表示位元組數
f1 = open('log',mode='rb') #bytes 模式開啟,不可以指定編碼格式,是什麼格式就以什麼格式開啟b'\xe6\x88\x91'content = f1.read(3) #編輯器編碼為utf-8,而中文的utf-8 編碼為3個位元組表示乙個文字。
print(content,type(content))
c = content.decode(encoding='utf-8')
print(c)
我
f1.close()
readline #每次讀取一行,按順序讀取,讀取內容以字串格式存在
log 檔案內容1 我愛你中國1我愛你中國
2alksdkjdsa
3jldfj
4k5...
f1 = open('
log',encoding='
utf-8
',mode='r'
)content =f1.readline()
(content)
(f1.readline())
print(f1.readline())
2 alksdkjdsa
3 jldfj
f1.close()
readlines #讀取整個檔案,把檔案的每一行作為乙個元素組成乙個列表,不僅讀取每一行內容還有換行符也一併讀取。
f1 = open('log',encoding='
utf-8
',mode='r'
)content =f1.readlines()
(content)['
1 我愛你中國\n
', '
2 alksdkjdsa\n
', '
3 jldfj\n
', '
4 k\n
', '
5 ...
']f1.close()
for 迴圈讀取檔案 #可以迭代式的逐行讀取,讀取一行完畢後自動從記憶體中清除,再讀取下一行。不耗費記憶體,適合讀取大檔案
f1 = open('log', encoding='
utf-8')
for i in
f1:
(i)f1.close()
whith open as ... #無需關閉檔案控制代碼
whith open('log',encoding='
utf-8
',mode='r'
) as f1:
content = f1.read
r+ #檔案的讀寫,可以讀也可以寫,但是不常用
無論是檔案的讀還是寫,讀寫操作後檔案的指標都會停留在操作後的位置,例如readline 讀取一行檔案,指標就到了這一行的末尾,read讀取全文,那麼指標就到了檔案最後。
seek(offset,whence)
log 檔案內容abcdefg
f1 = open('
log', encoding='
utf-8
', mode='r'
)f1.seek(2,0) #以檔案開頭作為起始偏移量未二個位元組
(f1.read())
f1.close()
輸出:cdefg
seek(0) #表示回到檔案的開始
seek(0,2) #表示回到檔案的結尾
tell() 獲取當前檔案指標位置(位元組)
log 內容 abcdefg f2 = open('
log',encoding='
utf-8
') f2.read()
(f2.tell()) #英文本母乙個字母對應乙個位元組 7log1 內容 abcdefg文 f3 = open('
log1
',encoding='
utf-8
') f3.read()
(f3.tell()) #utf-8編碼下中文字元佔3個位元組 10
w 寫模式 #覆蓋寫入,如果檔案事先不存在則建立。檔案開啟的那一刻就已經清空了檔案原有的內容,此處再用seek()已經無任何作用
w+ 寫讀模式 #可以寫也可以讀。與w 特性完全一樣,只是在寫的基礎上加入了讀的模式。
a 追加寫 #從檔案的末尾處追加寫入
log2內容我是f1 = open('
log2
', encoding='
utf-8
', mode='a'
)f1.write(
'\n中國人
') #加\n會換行,不加則會直接追加到後面
f1.close()
log2內容
我是中國人
a+
f1 = open('log2
', encoding='
utf-8
', mode='a+'
)f1.write(
'fdsafdsafdsagfdg')
f1.seek(0) #指標調整到檔案開頭,否則讀取內容為空
(f1.read())
f1.close()
將檔案中的所有kobe改為james
業務邏輯
1,開啟原檔案,產生檔案控制代碼。
2,建立新檔案,產生檔案控制代碼。
3,讀取原檔案,進行修改,寫入新檔案。
4,將原檔案刪除。
5,新檔案重新命名原檔案。
importoswith open(
'file_test
', encoding='
utf-8
') as f1,\
open(
'file_test.bak
', encoding='
utf-8
', mode='w'
) as f2:
for line in
f1: new_line = line.replace('kobe
','james')
f2.write(new_line)
os.remove(
'file_test')
os.rename(
'file_test.bak
','file_test
')
檔案的操作模式有6種:r、r+、w、w+、a、a+,在上面模式基礎上可以實現rb、r+b、wb、w+b、ab、a+b的bytes模式。
檔案的操作
在檔案操作之前要匯入命名空間 system.io 讀寫檔案的步驟分為5步 1 建立檔案流 語法 filestream fd new filestream 檔案路徑 filemode 其中 filemode 是列舉型別的,列舉型別的主要作用是約定乙個變數的值的範圍 其中包括有 create 用指定名稱...
檔案的操作
openopen 內建函式,open底層呼叫的是作業系統的介面 f1,變數.f1,fh,file,file handler,f h 檔案控制代碼.通過對檔案的任何操作都會通過檔案控制代碼.的方式.encoding 可以不寫,不寫引數,預設編碼本.預設編碼本 作業系統的預設的編碼 檔案控制代碼 是乙個...
檔案的操作
只要牽扯到檔案的操作,都是字串 開啟檔案用到 w 原始檔內容會被清空 相當於新建 sprip 取消換行符 換行符2個位元組 一 開啟 win gbk mac linux utf 8 f open 歌詞 f 檔案操作符 檔案控制代碼 檔案操作物件 習慣叫 f file f obj f handler ...