1. 程式人生 > 其它 >Python-04 基礎語法-檔案操作

Python-04 基礎語法-檔案操作

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)