第十章 文件與數據格式化
隨著程序規模的增大,我們不再只處理內存中的臨時數據,而需要將數據長期保存或跨程序共享。文件是最基本的數據持久化方式,也是 Python 與外部世界溝通的重要橋梁。
在現代編程中,文件不僅僅是“讀寫文本”,它還代表著數據的組織形式。
通過不同的文件格式(如 .txt、.csv、.json),我們可以存儲和處理一維列表、二維表格,甚至高維結構化數據。
學習目標:
(1)理解文件的概念、分類及其在程序中的作用。
(2)掌握 Python 文件的打開、讀取、寫入與關閉操作。
(3)熟練使用 with 上下文與異常處理實現安全文件操作。
(4)了解數據的組織維度(一維、二維、高維)與常用格式(CSV、JSON)。
(5)能夠將程序數據保存為文本或結構化文件并重新加載使用。
10.1 文件概述
當程序運行結束后,所有變量和數據都將從內存中消失。若要保存程序的運行結果、記錄日志或在不同程序間共享信息,就需要借助文件(File)。
文件是數據在外部存儲介質(如磁盤)上的長期存放形式,是實現數據持久化的核心手段。
Python 提供了簡單而功能強大的文件操作接口,使得保存結果與加載數據都非常方便。
10.1.1文件與路徑
文件由文件名和路徑組成。路徑(Path)描述了文件在計算機存儲中的位置。
(1)絕對路徑(Absolute Path):從磁盤根目錄開始的完整路徑。
例如:
"C:\\Users\\mediaTEA\\Documents\\data.txt"(2)相對路徑(Relative Path):相對于當前程序所在目錄的路徑。
例如:
"data\\result.txt" # 當前目錄下的 data 文件夾Python 中常用 或 模塊處理路徑:
print(data_dir.exists())10.1.2 文件類型
根據存儲形式不同,文件主要分為兩類。
(1)文本文件(Text File)
? 以字符形式存儲數據,如 .txt、.csv、.json。
? 支持文本編輯器打開。
? 通常需要指定編碼(如 UTF-8)。
(2)二進制文件(Binary File)
? 以字節形式存儲,如圖片、音頻、模型文件(.jpg、.mp3、.pkl)。
? 不可直接用文本方式查看。
10.1.3文件編碼
open() 在文本模式下的默認編碼依賴于運行環境的區域設置,因此建議顯式指定 encoding="utf-8" 以避免跨平臺編碼問題。
print(f.read())提示:
可通過標準庫 .getpreferredencoding() 查看系統 locale。
10.1.4 數據組織的維度
文件不僅僅是保存內容的容器,它還決定了數據的組織方式。
Python 支持多種維度的數據表示。從一維的數列,到二維的表格,再到高維的嵌套結構。不同維度的數據對應不同的文件格式與讀取方法。
10.2 文件的使用
文件的操作流程可概括為三步:
打開(open) → 操作(讀寫) → 關閉(close)
在 Python 中,既可手動控制文件關閉,還可通過 with 上下文自動管理資源。
10.2.1 文件的打開與關閉
使用內置函數 打開文件。
基本語法結構:
f = open(file, mode, encoding=None) # 打開文件,返回一個文件對象常見模式說明:
'r+' 從開頭讀寫;'w+' 先截斷再讀寫;'a+' 追加寫入、可讀取。示例:
f.close()提示:寫入后務必調用 .close() 關閉文件,以釋放資源。
10.2.2 with 上下文管理器
with 語句能自動處理文件的關閉操作,是推薦的文件操作方式。
f.write("追加一行文本。\n")等價于:
f.close()優點:即使程序中途出錯,文件也會被安全關閉。
10.2.3 文件的讀寫
(1)讀取文件
相關方法:
.read(size = -1)
讀取文件全部內容或指定 size 長度的字符串或字節流。
.readline(size = -1)
讀取一行或該行前指定 size 長度的字符串或字節流。
說明:與 .read() 的參數一樣,size 表示要返回的最大字符(文本模式)或字節(二進制模式)數;當 size 被指定且小于剩余內容長度時會返回不完整的行/數據片段。
.readlines(hint = -1)
讀取所有行,返回以行元素的列表。hint 是一個建議的字節/字符大小閾值(近似),并非嚴格的行數限制。
lines = f.readlines(1024) # 大致讀取 ~1024 字節的行,返回行列表.seek(offset, whence=0)
改變當前文件操作指針的位置。offset 是相對于 whence 的偏移量(以字節或字符為單位,取決于文件模式)。whence 指定相對位置:0(文件開頭)、1(當前位置)、2(文件結尾)。
f.seek(0, 2) # 或 f.seek(0, os.SEEK_END)示例 1:
print(text)示例 2:
print(line)示例 3:
print(line, end="") 若文件很大時,推薦使用按行迭代 for line in f: 的方式。
(2)寫入文件
相關方法:
.write(s)
寫入字符串或字節流到文件。
.writelines(lines)
將一個元素為字符串的列表整體寫入到文件。
示例 1:
f.write("Loss=0.45, Accuracy=0.82\n")示例 2:
f.writelines(ls).writelines() 不會自動添加換行符,若要自動添加換行,列表元素必須包含 \n,還可使用 print(line, file=f) 或者 f.write("\n".join(lines))。
10.2.4 文件異常處理
文件操作中常見的異常包括:
? FileNotFoundError:文件不存在。
? PermissionError:無訪問權限。
? IsADirectoryError:路徑是文件夾不是文件。
示例:
print("讀取文件時發生錯誤:", e)10.3 一維數據的組織與處理
Python 提供了靈活的工具來讀取、存儲與處理一維數據,使我們能夠輕松完成統計實驗結果、分析日志文件、清洗或篩選文本數據以及提取模型預測結果等任務。
10.3.1 一維數據的表示與存儲
最常見的一維數據結構有列表(list)和字符串(str)。
列表適合保存數值型或混合型數據,而字符串常用于原始文本。
例 10.3.1:將模型損失值寫入文本文件
print("模型訓練損失值已保存。")保存后的文件內容為:
0.69這種方式適用于線性、按時間順序變化的數據,如溫度記錄、實驗結果、訓練日志等。
10.3.2 一維數據的讀取與處理
讀取文件后,可通過類型轉換與內置函數進行進一步分析。
例 10.3.2:計算平均損失值
print("無有效數據。")輸出:
平均損失值:0.802進一步示例:篩選特定區間的數據
print("篩選后數據:", filtered)輸出:
篩選后數據: [0.76, 0.69]這種篩選操作在 AI 訓練監控中非常常見,比如只提取低于閾值的損失以分析收斂階段。
10.3.3 一維數據的應用
文本文件不僅可用于保存數值,也常存放事件記錄或系統日志。
我們可以使用字符串方法來搜索、過濾與統計關鍵信息。
例 10.3.3:過濾 AI 訓練日志中的異常行
print(e)示例輸入文件(train_log.txt):
[INFO] Epoch 3: Loss=0.44輸出:
[ERROR] Model failed to converge這種文本過濾思路與現實中的日志監控系統一致,是 AI 工程與系統維護的重要技能之一。
例 10.3.4:關鍵字統計器
統計一維文本數據中指定關鍵詞的出現次數。
print(f"關鍵詞 '酒' 出現次數:{count}")輸出示例:
關鍵詞 '酒' 出現次數:3此方法可用于自然語言處理(NLP)中的詞頻分析,也可擴展為關鍵詞提取或情感統計等任務。
小結
本次課介紹了 Python 文件操作的基礎概念、路徑處理、文件類型與編碼,以及文件的打開、關閉、讀寫與異常處理方法。通過示例展示了一維數據的保存、讀取、篩選與分析,以及日志與文本的關鍵字統計。
下一課將進一步講解二維及高維數據的組織與處理(如 CSV 與 JSON 文件),并結合綜合案例進行文件應用實踐,為實際數據處理與 AI 訓練監控等打下堅實基礎。
“點贊有美意,贊賞是鼓勵”
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.