普通檔案的讀寫

python路人甲發表於2020-10-20

檔案讀取

1.開啟檔案

"""
open(path,flag,encoding)
    path:需要開啟的檔案的路徑,可以是相對路徑,也可以是絕對路徑
    
    flag:表示檔案開啟的方式
        r:只讀,檔案描述符出現在檔案的開頭
        rb:read binary,以二進位制的方式開啟一個檔案用於只讀,檔案描述符出現在			檔案的開頭
        r+:讀寫,檔案不存在會報異常
        rb+:以二進位制的方式開啟一個檔案用於讀寫
        
    encoding:
        utf-8/UTF-8/utf8
        gbk/GBK
"""
# 注意1:如果只讀,普通文字檔案使用r開啟即可,open函式返回被開啟的檔案物件【檔案描述符】
# 注意2:encoding一定要和檔案本身的編碼格式保持一致,否則亂碼

2.讀取內容

"""
f.read(value),value省略,則預設讀取檔案中的全部內容,value表示位元組數
f.readline(value):value省略,則預設一次只能讀取一行,value表示位元組數
f.readlines():以行為單位,返回一個列表,行作為列表中的元素
"""

3.關閉檔案

關閉檔案的過程實際上是將檔案物件銷燬的過程,為了避免造成系統資源的浪費

f.close()

檔案寫入

1.開啟檔案

open(path,flag,encoding)
    path:需要開啟的檔案的路徑,可以是相對路徑,也可以是絕對路徑
    flag:表示檔案開啟的方式
        w:普通檔案檔案的寫入         *****
        wb:read binary,二進位制檔案內容的寫入  *****
        w+:讀寫,檔案不存在建立
        wb+:以二進位制的方式開啟一個檔案用於讀寫
        a:append,表示追加      *****
    encoding:
        utf-8/UTF-8/utf8
        gbk/GBK

注意:
    使用w或者wb,新的內容會覆蓋掉舊的內容
    使用a,新的內容會追加到原內容的後面
"""
# 注意1:寫入檔案的時候,檔案可以不存在,會自動建立
# 注意2:常用檔案的編碼格式為utf-8.s,如果encoding使用gbk,開啟檔案會出現亂碼

2.寫入內容

x.write(str),將指定字串寫入到指定檔案中,返回被寫入的字串的長度
x.writelines(seq), 將序列中的字串寫入到指定檔案中

# 注意writelines傳參的時候,列表中的每個元素的後面新增\n
# f2.writelines(["fhajkfh\n","aaaaa\n","tquioetuqoiwu6578465\n"])

# with上下文寫入
with open(r"file3.txt","w",encoding="utf-8") as x:
    x.write("fahj")
    x.flush()  # 重新整理:如果在資料量大的情況下,加快資料的寫入速率

3.關閉檔案

非文字檔案讀寫

如果需要開啟的是圖片,音視訊或者壓縮包等,開啟方式需要採用rb或者wb

如果採用rb或者wb的方式開啟檔案,則必須省略encoding引數

普通文字檔案讀取完成之後獲取到的是一個字串,二進位制讀取結果為一個位元組

with管理上下文

"""
with上下文的工作原理:
    with是管理上下文的關鍵字,也被稱為上下文管理器,當一個物件使用with的時候,
    當物件進入上下文的時候,會自動呼叫__enter__;
    當物件退出上下文的時候,會自動呼叫__exit__;
    as關鍵字:通過as關鍵字接收使用with關鍵字的物件,as後面的是一個變數【引用】
"""

class Check(object):
    def __enter__(self):
        # 當物件進入上下文環境時,主要是為了初始化相應的資源,如:開啟檔案
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        """
        exc :exception,異常【錯誤】
        :param exc_type: 異常型別
        :param exc_val: 異常值
        :param exc_tb:
        """

        return  True   #內部自己處理異常,不會向直譯器丟擲【raise】異常

# 讀取檔案
with open(r"","r",encoding="utf-8") as f:
    print(f.read())