檔案的讀寫操作

2022-05-21 17:54:12 字數 4996 閱讀 8059

檔案的讀操作:open()

- 第乙個引數必須有,表示檔案的絕對路徑或者相對路徑

- 第二個引數mode,表示檔案開啟的方式

'r':讀

'w':寫

'a':追加

'r+' == r+w(可讀可寫,檔案若不存在就報錯(ioerror))

'w+' == w+r(可讀可寫,檔案若不存在就建立)

'a+' ==a+r(可追加可寫,檔案若不存在就建立)

對應的,如果是二進位制檔案,就都加乙個b:

'rb'  'wb'  'ab'  'rb+'  'wb+'  'ab+'

f = open(r'

.\.vscode\project\test.txt

', '

r')#

使用了相對路徑

print

(f.read())

f.close()

檔案使用完畢後必須關閉,因為檔案物件會占用作業系統的資源,並且作業系統同一時間能開啟的檔案數量也是有限的,更重要的是,沒有關閉檔案則修改或者新增的內容還沒有全部寫入磁碟,其他檔案讀取的時候是無法獲得的!

如果檔案不存在,open()函式就會丟擲乙個ioerror的錯誤,並且給出錯誤碼和詳細的資訊告訴你檔案不存在:

filenotfounderror: [errno 1] no such file or directory: '

test.txt

'

由於檔案讀寫時都有可能產生ioerror,一旦出錯,後面的f.close()就不會呼叫。所以,為了保證無論是否出錯都能正確地關閉檔案,我們可以使用try ... finally來實現:

try

: f = open('

d:/python/.vscode/project/test.txt

', '

r')#

使用了絕對路徑

print

(f.read())

finally

:

iff:

f.close()

但是每次都這麼寫實在太繁瑣,所以,python引入了with語句來自動幫我們呼叫close()方法:with語句使用的技術是一種叫做上下文管理協議的技術,它可以自動判斷檔案的作用域,自動關閉不在使用的開啟的檔案控制代碼

#

如果路徑前沒有r則要用\\轉義字元或者使用/,r表示按原始字元處理

with open(r'

d:\python\.vscode\project\test.txt

', 'r'

) as f:

print(f.read())

python檔案物件提供了三個「讀」方法: read()、readline() 和 readlines(),每種方法可以接受乙個變數以限制每次讀取的資料量:

注意:這三種方法是把每行末尾的'\n'也讀進來了,它並不會預設的把'\n'去掉,需要我們手動去掉,仔細比較下面幾種寫法的區別:

- readlines():

with open('

d:/python/.vscode/project/test.txt

', 'r'

) as f:

list =f.readlines()

print

(list)

#['123\n', '456\n', '789\n']

with open('

d:/python/.vscode/project/test.txt

', 'r'

) as f:

list =f.readlines()

for i in

list:

print

(i)#

123#

#456##

789#

去掉'\n'的方法:

with open('

d:/python/.vscode/project/test.txt

', 'r'

) as f:

list =f.readlines()

for i in

range(len(list)):

list[i] = list[i].rstrip('\n'

)

print

(list)

#['123', '456', '789']

- read():

with open('

d:/python/.vscode/project/test.txt

', 'r'

) as f:

list =f.read()

print

(list)

#123

#456

#789

#

with open('

d:/python/.vscode/project/test.txt

', 'r'

) as f:

list =f.read()

for i in

list:

print

(i)#1#

2#3#

##4#

5#6#

##7#

8#9#

#

- readline():

with open('

d:/python/.vscode/project/test.txt

', 'r'

) as f:

list =f.readline()

print

(list)

#123

#

with open('

d:/python/.vscode/project/test.txt

', 'r'

) as f:

list =f.readline()

for i in

list:

print

(i)#1#

2#3#

#

seek(offset, from):移動檔案的讀取位置,也叫讀取指標

移動的單位是位元組(byte)

乙個漢子由若干個位元組構成

返回檔案只針對 當前位置

#

開啟檔案後,從第5個位元組出開始讀取

#開啟讀寫指標在0處, 即檔案的開頭

with open(r'

test01.txt

', 'r'

) as f:

#seek移動單位是位元組

f.seek(6, 0)

strchar =f.read()

print(strchar)

tell():用來顯示檔案讀寫指標的當前位置,單位是位元組

with open('

d:/python/.vscode/project/test.txt

', 'r'

) as f:

s = f.read(2)

ft =f.tell()

while

s:

print

(ft)

print

(s)

s = f.read(2)

ft =f.tell()#2

#my#4

#n#6

#am#8

#e#10

#is#12

#w#14

#jw

檔案的寫操作:write()

f = open('

test.txt

', '

w') #

若是'wb'就表示寫二進位制檔案

f.write('

hello, world!')

f.close()

注意:'w'這個模式是這樣的:如果沒有這個檔案,就建立乙個;如果有,那麼就會先把原檔案的內容清空再寫入新的東西。所以若不想清空原來的內容而是直接在後面追加新的內容,就用'a'這個模式

我們可以反覆呼叫write()來寫入檔案,但是務必要呼叫f.close()來關閉檔案。當我們寫檔案時,作業系統往往不會立刻把資料寫入磁碟,而是放到記憶體快取起來,空閒的時候再慢慢寫入。只有呼叫close()方法時,作業系統才保證把沒有寫入的資料全部寫入磁碟。忘記呼叫close()的後果是資料可能只寫了一部分到磁碟,剩下的丟失了。所以,還是用with語句來得保險:

with open('

test.txt

', 'w'

) as f:

f.write(

'hello, world!

')

#

a代表追加方式開啟,只能在檔案末尾增加不能修改

with open('

d:/python/.vscode/project/test.txt

', 'a'

) as f:

f.writelines(

'i love it \n')

f.writelines(

'and i hate it \n

')

注意:換行符不會自動的加入,因此,需要顯式的加入換行符!

檔案的讀寫操作

說明 首先以讀寫方式開啟 r w a 都可以,不過要注意讀寫位置指標分別指向檔案頭 檔案頭 檔案尾 一次讀乙個字元 此時讀寫位置指標指向此位元組後面,判斷後,若要轉換,移動讀寫位置指標fseek fp,1l,seek cur 再寫入,由於在c中規定 以上述三種方式開啟檔案,既可讀又可寫,但 在沒有插...

檔案的讀寫操作

1.讀寫字元函式fgetc fputc int fgetc file stream 將流指標指向的檔案中的乙個字元輸出。若檔案指標指到檔案尾,會遇到檔案結束標誌eof 1 我們可以通過檢查該函式的返回值是否是 1來判斷是否已讀到檔案尾。int fputc int ch,file stream 將字元...

檔案的讀寫操作

1.read 會一次性讀取檔案的全部內容。2.readline 每次讀取一行,並且自帶換行功能,每一行末尾會讀到 n。3.readlines 一次性以行的形式讀取檔案的所有內容並返回乙個list,需要去遍歷讀出來。4.file控制代碼是乙個可迭代的物件因此,可以迴圈讀取檔案中的內容,每次讀一行。a ...