Python基礎知識之檔案讀寫與修改
阿新 • • 發佈:2018-12-27
基本操作
f = open("file1", "r") # 開啟檔案
first_line = f.readline() # 讀一行
data = f.read() # 讀取剩下所有內容,檔案大時候不要用
f.close() #關閉檔案
如果我們想迴圈檔案,並且在第九行輸出分割的話:
for index, line in enumerate(file.readlines()):
if(index == 5):
print ("-------我是分割線-------")
continue
print(line.strip())
注意: strip()方法是用來去除字串首尾空格的
但是當我們開啟一個大檔案的時候我們就會發現一個問題,file.readlines()是提前將所有行數都先讀取出來,再進行操作,那麼當我們開啟一個幾十個G的檔案的時候效果可想而知,因此上述方法基本不使用,應該使用以下方法:
count = 0
for line in file:
if count == 9:
print("-------我是分割線-------")
count += 1
continue
print(line)
count += 1
開啟檔案的模式有:
- r, 只讀模式(預設)
- w,只寫模式【不可讀;不存在則建立;存在則刪除內容】
- a,追加模式【可讀;不存在則建立;存在則只追加內容】
“+”表示可以同時讀寫某個檔案
- r+,可讀寫檔案【可讀;可寫;可追加】—–一般使用這個模式
- w+,可寫讀檔案【可寫;可讀;可追加】—–基本用不到
- a+,追加讀寫檔案
“b”表示處理二進位制檔案(如:FTP傳送上傳ISO映象檔案,Linux可忽略,windows處理二進位制檔案時需要標註)
- rb,以二進位制的模式讀取檔案,不可以傳encoding引數
- wb,以二進位制編碼的模式寫檔案 \
f.write("string字串".encode())
“U”表示在讀取時,可以將\r\n \r \n自動轉換成\n(與r或r+模式同時使用)
- rU
- r+U
檔案的方法
- tell() 當前檔案指向的指標,計數方式是按照字元個數
- seek(字元位置) 查詢檔案相應字元位置\
seek(0)就是返回到檔案開始位置,一般和tell()方法一起使用- encoding() 返回當前檔案編碼格式
- flush() 重新整理當前緩衝區,建議在關閉檔案前先flush當前緩衝區。
模仿進度條: import sys, time for i in range(20): sys.stdout.write("#") sys.stdout.flush() time.sleep(0.1)
在前面,我們已經注意到python寫檔案的時候,會將之前的內容刪除掉,重寫覆蓋,那麼我們如何來修改檔案呢?
檔案修改的方式
- 將檔案載入到記憶體中像VIM那樣,再進行修改
- 開啟一個檔案,修改完成之後寫到新檔案裡
修改檔案的思路
- 開啟兩個檔案
- 從原始檔逐行讀取,邊讀邊寫進新檔案中
- 通過語句進行判斷,找到需要需改的地方,修改檔案,再將修改過後的內容寫到新檔案中。
f = open("yesterday", 'r', encoding="utf-8")
fnew = open("yesterday.bak", "w", encoding="utf-8")
for line in f:
if "修改前的語句" == line:
line = line.replace("修改前的語句", "修改後的語句")
fnew.write(line)
f.close()
fnew.close()
line = line.replace("修改前的語句", "修改後的語句")
注意是line
而不是f
with語句
為了避免開啟檔案後忘記關閉,可以通過管理上下文,即:
with open("需要開啟的檔案", 'r', encoding="utf-8") as f:
# 執行語句...
# 當跳出with程式塊時,自動關閉檔案
如此方式,當with程式碼塊執行完畢後,內部會自動關閉並釋放檔案資源。
在python2.7後,with又支援同時對多個檔案的上下文進行管理,即:
with open("需要開啟的檔案1") as f, open("需要開啟的檔案2") as f2:
# 執行語句...
# 當跳出with程式塊時,自動關閉檔案