一. Python程式中, 文件的處理步驟是什麼? 二. 文本打開時設置的模式有哪些? 分別代表什麼意思? 三. os模塊中提供的常用文件操作? 四. 代碼實現: 大文件拷貝操作 註意: 不能一次性讀取大文件內容, 容易造成記憶體峰值 五. 代碼實現: 假設一個文件夾中有很多不同格式的文件, 要求: ...
一. 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)