撩課-Python-每天5道面試題-第9天
一. Python程式中, 檔案的處理步驟是什麼?
- 開啟
open("檔案","模式")
-
讀寫
2.1 讀
f.read(位元組數)
位元組數預設是檔案內容長度
下標會自動後移
f.readline([limit])
讀取一行資料
limit: 限制的最大位元組數
f.readlines()
會自動的將檔案按換行符進行處理
將處理好的每一行組成一個列表返回
for in
可以直接遍歷 f 本身
也可以遍歷行列表
2.2 寫
f.write("內容")
返回值是寫入的位元組長度
-
關閉
f.close()
關閉檔案
為什麼需要關閉?
開啟狀態, 會佔用系統資源
會把緩衝區內容清空到磁碟檔案中
二. 文字開啟時設定的模式有哪些? 分別代表什麼意思?
-
基礎模式
r
以只讀方式開啟檔案, 這是預設模式
檔案的指標將會放在檔案的開頭
注意: 檔案不存在, 會報錯
w
以只寫方式開啟檔案
檔案的指標將會放在檔案的開頭
所以, 寫入的新內容, 會覆蓋舊的內容
注意: 檔案不存在, 會自動建立一個新檔案
a
以追加方式(只寫)開啟檔案
檔案的指標將會放在檔案結尾
所以, 寫入的內容, 會新增到檔案末尾
注意:檔案不存在, 會自動建立一個新檔案
-
組合模式-增加b
rb
wb
ab
以二進位制格式進行操作檔案讀寫
如果檔案是二進位制檔案, 則選擇此項
例如: 圖片, 視訊, 音訊 ...
-
組合模式-增加+
r+
w+
a+
rb+
rw+
ra+
代表都是以 "讀寫模式" 進行開啟
其他特性基本和 + 前面的模式一致
但是關於部分操作, 有細節區別
三. os模組中提供的常用檔案操作?
-
模組
import os -
資訊獲取操作
.closed: 返回true如果檔案已被關閉,否則返回false
.name: 返回檔案的名稱 -
其他操作
3.1 重新命名
os.rename(‘old_name’, 'new_name')
3.2 刪除
os.remove('檔名')
3.3 建立資料夾
os.mkdir("資料夾名稱")
3.4 獲取當前目錄
os.getcwd()
3.5 改變預設目錄
os.chdir("目標目錄")
3.6 獲取目錄列表
os.listdir("./")
四. 程式碼實現: 大檔案拷貝操作
注意: 不能一次性讀取大檔案內容, 容易造成記憶體峰值
import os os.chdir("files") # 1. 只讀模式, 開啟要複製的檔案 #追加模式, 開啟副本檔案 source_file = open("d.txt", "r", encoding="utf-8") dst_file = open("d_bat.txt", "a", encoding="utf-8") # 2. 從原始檔中讀取內容 #寫入到目標檔案中, # 錯誤寫法: 針對於大檔案, 不應一次性讀取全部內容 # # content = source_file.read() # # dst_file.write(content) while True: content = source_file.read(1024) if len(content) == 0: break print("----", content) dst_file.write(content) # 3. 關閉原始檔和目標檔案 source_file.close() dst_file.close()
五.程式碼實現: 假設一個資料夾中有很多不同格式的檔案, 要求: 將不同格式的檔案, 劃分到不同格式的資料夾下;
例如: a.png b.txt c.avi d.png
劃分後:
png資料夾: a.png d.png
txt資料夾: b.txt
avi資料夾: c.avi
import os import shutil # 目標路徑 path = "files2" if not os.path.exists(path): exit() os.chdir(path) file_list = os.listdir("./") # print(file_list) # 1. 遍歷所有的檔案(名稱) for file_name in file_list: # print(file_name) # 2. 分解檔案的字尾名 # 2.1 獲取最後一個.的索引位置 xx.oo.txt index = file_name.rfind(".") if index == -1: continue # print(index) # 2.2 根據這個索引位置, 當做起始位置, 來擷取後續的所有字串內容 extension = file_name[index + 1:] print(extension) # 3. 檢視一下, 是否存在同名的目錄 # 4. 如果不存在這樣的目錄 -> 直接建立一個這樣名稱的目錄 # 5, 目錄存在 -> 移動過去 if not os.path.exists(extension): os.mkdir(extension) shutil.move(file_name, extension)