檔案的操作

2022-06-21 03:42:11 字數 4389 閱讀 8135

路徑、開啟方式、編碼格式。不標註開啟方式預設為唯讀。

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()

print

(content)

f1.close()

read(n)      #按照指定的位元組數或字元數讀取

log 檔案中內容為:我愛你中國

當檔案以r模式開啟,n表示字元個數

f1 = open('

log',encoding='

utf-8

',mode='r'

)content = f1.read(3)

print

(content,type(content))

我愛你

'str

'>

f1.close()

當檔案以rb 模式代開,n表示位元組數

f1 = open('log',mode='rb')          #bytes 模式開啟,不可以指定編碼格式,是什麼格式就以什麼格式開啟

content = f1.read(3)              #編輯器編碼為utf-8,而中文的utf-8 編碼為3個位元組表示乙個文字。

print(content,type(content))

c = content.decode(encoding='utf-8')

print(c)

b'\xe6\x88\x91'

f1.close()

readline        #每次讀取一行,按順序讀取,讀取內容以字串格式存在

log  檔案內容

1我愛你中國

2alksdkjdsa

3jldfj

4k5...

f1 = open('

log',encoding='

utf-8

',mode='r'

)content =f1.readline()

print

(content)

print

(f1.readline())

print(f1.readline())

1 我愛你中國

2 alksdkjdsa

3 jldfj

f1.close()

readlines        #讀取整個檔案,把檔案的每一行作為乙個元素組成乙個列表,不僅讀取每一行內容還有換行符也一併讀取。

f1 = open('

log',encoding='

utf-8

',mode='r'

)content =f1.readlines()

print

(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:

print

(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)                    #以檔案開頭作為起始偏移量未二個位元組

print

(f1.read())

f1.close()

輸出:cdefg

seek(0)        #表示回到檔案的開始

seek(0,2)          #表示回到檔案的結尾

tell()     獲取當前檔案指標位置(位元組)

log 內容 abcdefg f2 = open('

log',encoding='

utf-8

') f2.read()

print

(f2.tell())                #英文本母乙個字母對應乙個位元組 7log1 內容 abcdefg文 f3 = open('

log1

',encoding='

utf-8

') f3.read()

print

(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)                   #指標調整到檔案開頭,否則讀取內容為空

print

(f1.read())

f1.close()

將檔案中的所有kobe改為james

業務邏輯

1,開啟原檔案,產生檔案控制代碼。

2,建立新檔案,產生檔案控制代碼。

3,讀取原檔案,進行修改,寫入新檔案。

4,將原檔案刪除。

5,新檔案重新命名原檔案。

import

oswith 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 ...