檔案與目錄
目標
- 檔案的開啟和建立
- 檔案讀取
- 檔案寫入
- 內容查詢和替換
- 檔案刪除、複製、重新命名
- 目錄操作
案例
- 目錄分析器
- 防毒軟體
- 系統垃圾清理工具
python檔案讀寫
- python進行檔案讀寫的函式是
open
或file
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)
- 函式宣告: