資料的存儲與讀取
open() 函式
open(檔案名稱[,模式][,encoding=”編碼”][,newline=換行符號]
檔案名稱
可以是test.text.或者test.html,可以設定相對路徑或是絕對路徑,預設是目前目錄
模式
用什麼模式打開,下面解說
encoding=
指定用什麼編碼打開,建議utf-8
newline=
指定換行的符號,連續寫的話建議用空字串(“”)來代替換行符號
模式 | 說明 |
---|---|
r | 讀取模式,此為預設模式 |
r+ | 可讀寫模式 |
rb | 用二進制模式讀取模式打開,指標會在文件開頭 |
rb+ | 以二進制格式打開一個文件用於讀寫,指標會位於開頭位置,一般用於非文本文件如圖片等。 |
w | 覆寫模式,如果檔案為存在則新開一個,已存在的檔案會複寫過去 |
w+ | 可讀寫模式,檔案不存在時會新開一個,檔案存在時則複寫過去 |
wb | 用二進制只覆寫檔案,檔案不存在時新增一個,存在時則複寫過去 |
wb+ | 以二進制格式打開一個文件用於讀寫,指標會位於開頭位置,如果文件存在則從頭開始編寫,即原本的內容會刪除。 |
a | 打開一個文件用於追加內容,如果文件存在則指標會位於文件底部(結尾),如果文件不存在則新增一個檔案 |
ab | 以二進制打開文件追加內容, 如果文件存在則指標會位於文件底部(結尾) , 如果文件不存在則新增一個檔案 |
a+ | 打開一個文件用於讀寫追加, 如果文件存在則指標會位於文件底部(結尾) ,如果文件不存在則新增一個檔案 |
ab+ | 以二進制打開文件追加內容 , 如果文件存在則指標會位於文件底部(結尾) ,如果文件不存在則新增一個檔案 |
函式說明
函式 | 說明 |
---|---|
f.readable() | 測試是否可讀取 |
f.read([size]) | 讀取選定大小(size)5字元,可能BOM也算一個,並將指標往後size字元 |
f.readline([size]) | 讀取目前這行所在指標位置之後size長度的內容,若省略參數則讀取一整排包括\n |
f.readlines() | 讀取指標後的所有的列並以list回傳 |
f.seek(0) | 將指標移動到指定位置,0為開頭 |
f.__next__() | 回傳目前這行指標後的元素並移動到下一列 |
f.tell() | 傳回目前指標位置,如果使用了next或for迴圈之後再使用tell()會出錯 |
f.writable() | 測試是否可寫入,False目前是只讀模式 |
f.write(“寫入點東東”) | 將指定的文字寫進檔案,並無返回值 |
f.writelines(list1) | 將指定的串列寫入文件,並無返回值 |
f.flush() | 把暫存區的內容寫進去,還沒一般還沒f.close()時檔案都是在暫存區 |
f.close() | 關閉文件檔案,使用with會自動關閉 |
BOM
BOM是用來標示文件編碼的標記
在使用open()函數時加入sig參數encoding=”utf-8-sig”則可以在開頭加入BOM或隱藏BOM
content = """Hello Python
qwjeojwqoejqwpoejw
qweqwejiojoime
wekqopwekpoqwkepokqpw
"""
with open("file_test", "w", encoding="utf-8-sig") as f:
#如果加入sig會加入BOM資料
f.write(content) #把變數寫入檔案
input() #動作暫停,輸入enter繼續,方便觀察text
f.flush() #把暫存區的內容寫進去,還沒一般還沒f.close()時檔案都是在暫存區
#f.write(input("這裡可以輸入資料:"))
list1 = ["我", "是", "串", "列"]
with open("file_test", "r", encoding="utf-8") as f:
print(f.readlines()) #查看BOM資料
#如果未加入sig會顯示BOM資料
#加入sig會過濾BOM資料
print(f.readable()) #測試是否可讀取
print(f.seek(0)) #把指標移到標頭
print(f.read(5)) #讀取選定大小(size)5字元,可能BOM也算一個,並將指標往後size字元
#print(f.seek(0))
print(f.tell()) #讀取目前指標位置
print(f.readline()) #讀取目前這行所在指標位置之後size長度的內容,若省略參數則讀取一整排包括\n
print(f.readlines()) #讀取指標後的所有的列並以list回傳
print(f.seek(0))
print(f.__next__()) #回傳目前這行指標後的元素並移動到下一列
print(f.__next__()) #回傳目前這行指標後的元素並移動到下一列
#如果使用了next或for迴圈之後再使用tell()會出錯
#print(f.tell())
print(f.writable()) #測試是否可寫入,False目前是只讀模式
f.write("寫入點東東") #將指定的文字寫進檔案,並無返回值(r模式無法寫入)
f.writelines(list1) #將指定的串列寫入文件,並無返回值(r模式無法寫入)
f.close() #關閉文件檔案,使用with會自動關閉