1. 程式人生 > 其它 >檔案的相關操作

檔案的相關操作

檔案內指標的移動

鋪墊內容

      # 這裡需要注意的是檔案讀取read關鍵字的引數問題。
      # 1.文字模式下,read關鍵字內部的引數指的是讀取的字元數
      file_name.read(9)  # 即讀取檔案自開始起的九個字元。
      # 2.二進位制模式下,括號內的數字代表讀取的位元組數
      # 不同的編碼字元所需要的位元組數是不同的。unicode所有字元都是兩個位元組,utf8中文是三個位元組、英文是一個位元組      

指標的移動(seek關鍵字)

      '''read關鍵字讀取檔案所有內容後,指標會移動到檔案的末尾位置,這是如果需要再次讀取檔案裡的內容就需要讓讀取的指標移動位置
         seek關鍵字的第二各引數是調整指標在檔案中的位置,0是起始位,1是所在位置,2是檔案內容的末尾。第一個引數是在第二個引數規定位置向後移動的位元組數'''
          with open(r'011.txt', 'r', encoding='utf8') as file1:
              print(file1.read(3))
              file1.seek(3, 0)  # 在起始位置向後移動三個位元組
              print(file1.read(3))
              file1.seek(3, 1)  # 在所在位置向後移動三個位元組
              print(file1.read(3).decode('utf8'))
              file1.seek(-3, 2)  # 在檔案的末尾向前移動三個位元組
              print(file1.read().decode('utf8'))
              print(file.tell())  # 獲取指標相對於檔案開頭的位置

注:seek的二個引數為1或者2時,只適用於二進位制模式

檔案的修改

檔案的佔有態和自由態

      '''
      檔案的佔有態和自由態是指檔案在計算機的儲存空間裡的兩種狀態。
      在機械硬盤裡,檔案的刪除本質上就是其內刻印的資料從佔有態到自由態的轉變。
      如果後來後來的檔案儲存到該區域的話,會對該區域原來自由態的資料進行覆蓋。
      這就說明了機械硬盤裡的檔案是不能從內部更改的,修改的話只有兩種方式.
'''

檔案的修改

      1. 建立新檔案,刪除舊檔案
                 實現思路:先以讀取的方式開啟檔案,然後以寫的方式建立臨時檔案,然後逐行讀取原檔案,修改並寫入臨時檔案。然後將原檔案刪除,把臨時檔案改名為原檔名
                 優缺點:優點就是節省記憶體,缺點就是檔案修改過程中會出現兩份。
              2. 直接覆蓋舊檔案
                 實現思路:將檔案一次讀取到記憶體,然後修改結束覆蓋原檔案
                 優缺點:優點是檔案修改時只有一份,缺點就是會佔用記憶體
# 方式一:
      with open('011.txt','r', encoding='utf-8') as file1:
          data = file1.read()
      with open('b.txt', mode='w', encoding='utf-8') as file2:
          file2.write(data.replace('中國牛逼', '俄羅斯帶勁'))

# 方式二
      import os  # 載入模組

      with open('011.txt', 'r', encoding='utf-8') as read_file1:
              open('.011.txt.swap', 'w', encoding='utf-8') as wrife_f:
          for line in read_f:
              wrife_f.write(line.replace('中國牛逼', '俄羅斯帶勁'))
      os.remove('011.txt')  # 刪除檔案
      os.rename('.011.txt.swap', '011.txt')  # 重新命名檔案