Python-04 基礎語法-檔案操作
阿新 • • 發佈:2021-08-16
1 Python檔案操作
檔案開啟
f = open("test",encoding="utf-8").read()
#開啟檔案讀取test檔案中的全部內容
注意:該檔案要存在
open()方法的完整寫法以及引數說明:
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True):
引數解釋:
引數 | 含義 |
---|---|
file | 必需,檔案路徑(相對或者絕對路徑) |
mode | 可選,檔案開啟模式 |
buffering | 設定緩衝 |
encoding | 一般使用utf8 |
errors | 報錯級別 |
newline | 區分換行符 |
closefd | 傳入的file引數型別 |
mode引數解釋
mode型別 | 含義 |
---|---|
r | 以只讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。 |
w | 開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。 |
r+ | 開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。 |
w+ | 開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。 |
b | 二進位制模式 |
rb | 以二進位制格式開啟一個檔案用於只讀。檔案指標將會放在檔案的開頭。 |
wb | 以二進位制格式開啟一個檔案只用於寫入。 |
a | 開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。 |
a+ | 開啟一個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。 |
ab+ | 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。 |
檔案讀
f = open("test","r",encoding="utf-8")# r代表只能讀 #f物件表示一個檔案控制代碼,就是相當於一個指標 data =f.read(); print(data)
注意:該檔案要存在,不存在則會報錯
f = open("test","r",encoding="utf-8")
print(f.readlines())
# 讀取檔案成為一個列表,每行作為一個元素
檔案寫
在對檔案進行寫的時候,如果寫入的檔案不存在,那麼就會自動建立該新檔案.
f = open("test2","w",encoding="utf-8")
f.write("我喜歡你")
#注意,此時不能夠讀取檔案,呼叫read()方法會報錯
檔案讀寫
#開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。
f = open("test","r+",encoding="utf-8")
print(f.readline())
f.write("哈哈哈")
#檢視檔案,可以看到哈哈哈被寫進檔案
檔案寫讀(不常用)
檔案寫讀模式:如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。
f = open("test2","w+",encoding="utf-8")
f.write("哈哈哈")
檔案追加
開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
f = open("test2","a+",encoding="utf-8")
f.write("ppp")
f.flush()#刷入硬碟
二進位制檔案讀
一般二進位制檔案用於網路傳輸或者用於讀取視訊檔案
f = open("test","rb")
print(f.readline())
# 結果模式:>>>b'Oh, yesterday when I was young\r\n'
二進位制檔案寫
在進行二進位制檔案寫入的時候,如果寫入一個字串,那麼需要將字串轉化為位元組型別,字串不轉碼是無法寫入檔案的.
f = open("test","wb")
f.write("你好".encode())
注意:進行二進位制檔案讀寫操作的時候,不要指定encoding,該檔案會以二進位制進行編碼
檔案常用方法
方法名 | 含義 |
---|---|
file.tell() | 列印指標位置,按字元計數統計 |
file.seek(0) | 指標回到指定未知,0代表回到檔案初始位置 |
file.encoding | 列印檔案的編碼 |
file.errors | 處理異常 |
file.name | 列印檔名稱 |
file.seekable | 判斷游標是否可以移動 |
file.flush() | 將緩衝區檔案重新整理到硬碟 |
file.close() | 關閉檔案,關閉後不能讀寫 |
file.read([size]) | 從檔案讀取指定的位元組數,如果未給定或為負則讀取所有。 |
file.readline([size]) | 讀取整行 |
file.write(str) | 將字串寫入檔案,返回的是寫入的字元長度。 |
file.writelines(list) | 向檔案寫入一個序列字串列表,如果需要換行則要自己加入每行的換行符。 |
進度條列印
使用flush快取實時重新整理
import sys,time
#列印進度條
for i in range(10):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.5)
列印檔案指定行
小檔案操作
for index,line in enumerate(f.readlines()):
prin(line.strip())
if index==5:
print("----")
continue
大檔案操作
#迭代器、邊讀取邊寫入,緩衝區保留一行
count=0
for line in f:
if count==9:
print(line)
count+=1
continue
print(line)