資料的存儲與讀取

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會自動關閉

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *