1. 程式人生 > >檔案控制代碼的其他方法、游標操作與檔案內容的迴圈

檔案控制代碼的其他方法、游標操作與檔案內容的迴圈

.closed
檢視控制代碼是否關閉

f = open("a.txt", "w")
print(f.closed)
f.close()
print(f.closed)

.encoding
檢視檔案控制代碼的編碼方式,即顯示使用什麼編碼開啟的而不是原檔案是以什麼編碼儲存的

f = open("a.txt", "w", encoding="utf8")
f.write("實驗內容")
f.close()
f = open("a.txt", "r", encoding="gb2312")
print(f.encoding)
f.close()

.flush
將記憶體中的內容刷入硬碟,一般情況下只有在檔案關閉時才會將記憶體中的檔案刷入硬碟,.flush語句可以立即將記憶體中的內容刷入硬碟。

f = open("b.txt", "w", ,encoding= "utf8")
f.write("實驗內容21")
f.flush()
f.close()

.name
顯示控制代碼開啟的檔案的檔名

f = open("b.txt", "w", encoding="latin-1")
print(f.name)
f.close()

檔案操作內的游標操作
除 .read(3) 方法表示讀取三個字元外,其餘文字處理方法游標的移動都是以位元組為單位的
tell()
顯示游標現在的位置,會以位元組為單位來數。

注意在Windows中,回車以\r\n的形式實現,所以tell()語句在Windows系統下在數字節的時候遇到會車會算兩個位元組,在Linux系統下回車就是以\n實現的。

但在顯示的時候Python將自動將\r\n轉化為\n,如果想讀取真正的換行符則在設定檔案控制代碼時在open函式中設定newline="" 引數。

tell()的演示和newline=""的作用:

f = open("new.txt", "w", encoding="utf-8")
f.write("123456,字\n")
print(f.tell())
f.close()
f1 = open("new.txt", "r", encoding="utf8")
print(f1.readlines())
f1.close()
f2 = open("new.txt", "r", encoding=
"utf8", newline="") print(f2.readlines()) f2.close()

.seek()
游標的移動
.seek()方法有三種模式,以第二個引數的0,1,2控制,預設為0模式。.seek(n,0)模式表示絕對位置,表示將游標移動到從頭開始的第n個位元組, .seek(n,1)模式標識相對位置,表示將游標從現在的位置移動n個位元組, .seek(-n,2)模式表示倒敘位置,表示將游標從末尾移動n個位元組。
注意在文字檔案中,如果沒有使用b模式選項開啟檔案,只允許從檔案頭開始計算相對位置。

f = open("new1", "wb")
f.write(bytes("中文789a\nde", encoding="utf8"))
f.seek(3)
print(f.tell())
f.seek(6)
print(f.tell())
f.seek(1, 1)
print(f.tell())
f.seek(5, 1)
print(f.tell())
f.seek(-1, 2)
print(f.tell())
f.close()

檔案的迴圈
第一種方式較第二種方式節省記憶體

#要一行給一行列印一行
f = open("Test1", "r", encoding="utf8")
for i in f:
	print(i)
f.close()
#全部讀取後逐行列印
f = open("Test1", "r", encoding="utf8")
for i in f.readlines():
	print(i)
f.close()