1. 程式人生 > 實用技巧 >python 檔案的基本操作

python 檔案的基本操作

檔案的基本操作

作業系統預設編碼

  • windows:gbk

  • linux:utf-8

  • Mac-OS:utf-8

  1. 開啟檔案

    • f1 = open('read.txt', encoding='utf-8',mode='r')
      

      f1變數稱為檔案操作控制代碼,通常以f1、file_handler、f_h等約定俗成形式存在。

      開啟檔案預設模式為'r',省略mode引數以只讀的形式開啟該檔案。

    • 檔案開啟之後必須要關閉:f1.close()。

  2. 檔案的讀:常用讀模式 r,rb,r+,r+b……

    • 讀取檔案模式'r',mode='r',用於讀取文字檔案。

      • f1.read():整個檔案全部一次性讀出來。返回值是一個字串。

      • f1.readline():按照一行一行讀取。帶有指標特性,下一次讀取會接著上一行後開始讀取。

      • f1.readlines():多行讀取,返回一個列表,每個元素是檔案中的一行。

      • ★★★ for:以遍歷檔案控制代碼的方式迴圈讀取全部檔案內容,表現形式等於readlines()方法返回的列表。但有很大的不同,在讀取大型巨型檔案時候,read()和readlines()方法會直接將整個檔案讀取進電腦記憶體,這將會導致記憶體不足;而for迴圈讀取大型檔案時,單次迴圈時間內只有檔案內的一行內容佔用記憶體,進入下個迴圈即釋放上一行內容。
        f1 = open('檔案的操作練習.txt', mode='r', encoding='utf-8')
        for line in f1:
          print(line, end='')
        f1.close()
        
    • 讀取檔案模式'rb',mode='rb',用於讀取非文字檔案。

      • 使用方法與'r'模式一樣,

        f1=open('1寸照片.jpg',mode='rb')  # 不需要加編碼模式
        print(f1.read())
        f1.close()
        
  3. 檔案的寫:常用寫模式 w,wb,w+,w+b

    • w寫模式:mode='w',用於寫入本文檔案。

      • f1.write()方法:沒有檔案時候建立一個檔案,如果檔案存在就”先清空再寫入“內容。

        w模式下,只有開啟檔案的時候清空一次,如果開啟檔案之後進行多次寫入,將以指標位置後開始寫入,並不會每次寫入都清空檔案內容。
        f1 = open('檔案的寫練習.txt', mode='w', encoding='utf-8')
        f1.write('三好學生就是我')
        f1.close()
        
    • wb寫模式:mode='wb',用於寫入非文字檔案。

      • 可以使用rb形式讀取非文字檔案,用wb寫入到一個新檔案裡。

        f1 = open('cat.jpg', mode='rb')
        photo=f1.read()
        f1.close()
        
        f2=open('cat1.jpg',mode='wb')
        f2.write(photo)
        f2.close()
        
  4. 檔案的追加:常用模式 a,ab,a+,a+b

    • a 追加模式:mode='a',用於追加寫入文字檔案。

      如果指定檔案不存在,則先建立檔案;如果指定檔案已經存在,則直接追加內容。

      每次追加並不會自動換行,需要手工新增換行符'\n'

      f1=open('檔案的追加',mode='a',encoding='utf-8')
      f1.write('情景劇劇本《愛的守護》')
      f1.close()
      
  5. 檔案操作的其他模式:r+,w+

    • r+ 模式:讀寫,先讀後追加。

      該操作物件需要已經存在,不存在指定檔案將報錯。
      寫操作時,是在檔案指標位置開始寫入,並不是清空再寫。
      操作檔案指標方法:f1.seek(),指定檔案指標所在位置。
      f1=open('檔案的追加',mode='r+',encoding='utf-8')
      print(f1.read())
      f1.write('\n檔案的讀寫操作')
      print(f1.read())
      f1.close()
      
  6. 檔案操作的其他功能:

    • 對檔案控制代碼的常用操作:read()、read(n)、readline()、readlines()、write……
    • 獲取當前檔案操作控制代碼的指標的位置:f1.tell(),返回值是以位元組為單位計算的整數。
    • 調整當前檔案操作控制代碼的指標位置:f1.seek(),括號中填寫整數,以位元組為單位計算。
    • 強制重新整理檔案:f1.flush(),將快取中的資料立刻寫入檔案,同時清空快取,一般用於close()方法之前,作用為關閉檔案前將快取寫入檔案。
  7. 開啟檔案的另一種方式:

    • with open()方法:

      • 優點一:不用手動關閉檔案控制代碼,它會在結束操作之後的一定時間內關閉。

      • 優點二:一個with可以開啟多個檔案進行操作

        # 太長語句換行可以直接使用'\'符號,直譯器在一個語句裡遇到這個符號就會知道這行沒有結束。
        with open('檔案的追加',mode='r',encoding='utf-8') as f1,\
                open('檔案的操作練習.txt',encoding='utf-8') as f2:
            print(f1.read())
            print(f2.name)
        
  8. 檔案的修改操作:

    • 檔案修改的標準步驟:

      1. 以讀的模式開啟原檔案。
      2. 以寫的模式建立一個新檔案。
      3. 將原檔案的內容讀出來修改成新內容,寫入新檔案。
      4. 將原檔案刪除。
      5. 將新檔案重命成原檔案。
        • 一次性讀取到記憶體,進行替換內容修改:
        import os
        with open('檔案的操作練習.txt',encoding='utf-8') as f1,\
            open('檔案的操作練習.bak',mode='w',encoding='utf-8') as f2:
            old_file=f1.read()
            new_file=old_file.replace('Mr.H','H.X')
            f2.write(new_file)
        os.remove('檔案的操作練習.txt')
        os.rename('檔案的操作練習.bak','檔案的操作練習.txt')
        
        • 使用for迴圈讀取檔案內容進行修改:
        with open('檔案的操作練習.txt',encoding='utf-8') as f1,\
            open('檔案的操作練習.bak',mode='w',encoding='utf-8') as f2:
            for line in f1:
                new_line=line.replace('amwkvi','Mr.H')
                f2.write(new_line)
        os.remove('檔案的操作練習.txt')
        os.rename('檔案的操作練習.bak','檔案的操作練習.txt')