18、檔案與目錄

水之原發表於2018-01-01

檔案與目錄

目標

  • 檔案的開啟和建立
  • 檔案讀取
  • 檔案寫入
  • 內容查詢和替換
  • 檔案刪除、複製、重新命名
  • 目錄操作

案例

  • 目錄分析器
  • 防毒軟體
  • 系統垃圾清理工具

python檔案讀寫

  • python進行檔案讀寫的函式是openfile
  • file_handle = open(filename, mode)
模式 說明
r 只讀
r+ 讀寫
w 寫入,先刪除原檔案,在重新寫入,如果檔案沒有則建立
w+ 讀寫,先刪除原檔案,在重新寫入,如果檔案沒有則建立(可以寫入輸出)
a 寫入,在檔案末尾追加新的內容,檔案不存在,建立之
a+ 讀寫,在檔案末尾追加新的內容,檔案不存在,建立之
b 開啟二進位制檔案。可以與r、w、a、+結合使用
U 支援所有的換行符號。"\r"、"\n"、"\r\n"

檔案物件方法

  • close
    • 格式
      • FileObject.close()
    • 說明
      • 關閉檔案,關閉前,會將快取中的資料先寫入檔案。
  • readline
    • 格式
      • String = FileObject.readline([size])
    • 說明
      • 每次讀取檔案的一行
      • size:是指每行每次讀取size個位元組,直到行的末尾
  • readlines
    • 格式
      • List = FileObject.readlines([size])
    • 說明
      • 多行讀,返回一個列表
      • size: 每次讀入size個字元,然後繼續按size讀,而不是每次讀入行的size個字元
  • read
    • 格式
      • String = FileObject.read([size])
    • 說明
      • 讀出檔案的所有內容,並複製給一個字串
      • size: 讀出檔案的前[size]個字元,並輸出給字串,此時檔案的指標指向size處
  • next
    • 格式
      • FileObject.next()
    • 說明
      • 返回當前行,並將檔案指標到下一行
  • write
    • 格式
      • FileObject.write(string)
    • 說明
      • write和後面的writelines在寫入前會是否清除檔案中原來所有的資料,在重新寫入新的內容,取決於開啟檔案的模式
  • writelines
    • 格式
      • FileObject.writelines(List)
    • 說明
      • 多行寫
      • 效率比write高,速度更快,少量寫入可以使用write
  • seek
    • 格式
      • FileObject.seek(偏移量,選項)
    • 說明
      • 選項=0時,表示將檔案指標指向從檔案頭部到“偏移量”位元組處。
      • 選項=1時,表示將檔案指標指向從檔案的當前位置,向向移動“偏移量”位元組。
      • 選項=2時,表示將檔案指標指向從檔案的尾部,向前移動“偏移量”位元組。
  • flush
    • 格式
      • FileObject.flush()
    • 說明
      • 提交更新

檔案查詢和替換

  • 檔案查詢
  • cat a.txt

      hello world
      hello hello world
  • 統計檔案中hello的個數

      import re
    
      fp = file("a.txt", "r")
      count = 0
      for s in fp.readlines():
          li = re.findall("hello", s)
          if len(li) > 0:
              count = count + len(li)
    
      print "Search ",count," hello"
      fp.close()
  • 檔案內容替換
  • 問題:把a.txt中的hello替換為good, 並儲存結果到b.txt中
  • 示例程式碼一:

      fp1 = file("a.txt", "r")
      fp2 = file("b.txt", "w")
    
      for s in fp1.readlines():
          fp2.write(s.replace("hello", "good"))
    
      fp1.close()
      fp2.close()
  • 示例程式碼二:

      fp1 = file("a.txt", "r")
      fp2 = file("b.txt", "w")
    
      s = fp1.read()
      fp2.write(s.replace("hello", "good"))
    
      fp1.close()
      fp2.close()

目錄操作

  • 目錄操作就是通過python來實現目錄的建立,修改,遍歷等功能
  • import os
    • 目錄操作需要呼叫os模組
    • 比如os.mkdir('/root/demo')
  • 常用函式
函式 說明
mkdir(path[,mode=0777]) 建立單個目錄
makedirs(name,mode=511) 建立多層級目錄
rmdir(path) 刪除單個目錄
removedirs(path) 刪除多層級目錄
listdir(path) 列出目錄
getcwd() 取得當前目錄
chdir(path) 切換目錄
walk(top, topdown=True, onerror=None)
  • 案例
    • 系統垃圾清除小工具
  • 方式
    • 遞迴函式
    • os.walk()函式
      • 函式宣告:os.walk(path)
      • 該函式返回一個元組,該元組有3個元素,這3個元素分別表示每次遍歷的路徑名,目錄列表和檔案列表。

          for path, dirlist, filelist in os.walk('.'):
              for filename in filelist:
                  print os.path.join(path, filename)

相關文章