檔案的讀操作: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')#
使用了相對路徑
(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')#
使用了絕對路徑
(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()
(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:
(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'
)
(list)
#['123', '456', '789']
- read():
with open('d:/python/.vscode/project/test.txt
', 'r'
) as f:
list =f.read()
(list)
#123
#456
#789
#
with open('d:/python/.vscode/project/test.txt
', 'r'
) as f:
list =f.read()
for i in
list:
(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()
(list)
#123
#
with open('d:/python/.vscode/project/test.txt
', 'r'
) as f:
list =f.readline()
for i in
list:
(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:
(ft)
(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 ...