【Python 文件I/O】

Python 的文件 I/O 操作是數據處理的基礎技能,涉及文件的讀寫、路徑管理、異常處理等核心功能。以下是文件 I/O 的核心知識點:


一、基礎文件操作

1. 打開文件
# 通用模式:r(讀)/w(寫)/a(追加) + b(二進制)/t(文本,默認)
f = open("data.txt", "r", encoding="utf-8")  # 文本模式讀取
f = open("image.jpg", "rb")                  # 二進制模式讀取
2. 關閉文件
f.close()  # 顯式關閉(需確保執行)# 推薦方式:使用 with 語句自動關閉
with open("data.txt", "r") as f:content = f.read()
# 此時文件已自動關閉

二、文件讀寫模式

模式描述行為
r讀取(默認)文件必須存在
w寫入覆蓋已存在文件,不存在則創建
a追加文件末尾寫入,不存在則創建
r+讀寫文件必須存在
w+讀寫覆蓋已存在文件,不存在則創建
b二進制模式與其他模式組合使用(如 rb

三、文件內容操作

1. 讀取內容
with open("data.txt", "r") as f:# 讀取全部內容full_text = f.read()# 逐行讀取(生成器)for line in f:print(line.strip())# 讀取指定大小chunk = f.read(1024)  # 讀取1KB
2. 寫入內容
with open("output.txt", "w") as f:f.write("Hello, World!\n")          # 寫入字符串f.writelines(["Line1\n", "Line2\n"]) # 寫入多行

四、文件路徑處理

1. 路徑操作
import os# 拼接路徑(跨平臺安全)
file_path = os.path.join("folder", "subfolder", "file.txt")# 獲取絕對路徑
abs_path = os.path.abspath("data.txt")# 檢查文件存在性
if os.path.exists("data.txt"):print("文件存在")
2. 路徑分解
path = "/user/docs/report.pdf"
print(os.path.basename(path))  # → "report.pdf"
print(os.path.dirname(path))   # → "/user/docs"

五、高級文件操作

1. 文件指針控制
with open("data.txt", "r+") as f:f.seek(10)      # 移動到第10字節f.write("X")    # 覆蓋寫入f.seek(0)       # 返回文件開頭print(f.read())
2. 二進制文件處理
# 讀取圖片文件
with open("image.jpg", "rb") as f:img_data = f.read()# 寫入二進制數據
with open("copy.jpg", "wb") as f:f.write(img_data)
3. 臨時文件
import tempfilewith tempfile.NamedTemporaryFile(mode="w+t") as tmp:tmp.write("臨時內容")tmp.seek(0)print(tmp.read())
# 臨時文件自動刪除

六、異常處理

try:with open("missing.txt", "r") as f:content = f.read()
except FileNotFoundError:print("文件不存在!")
except PermissionError:print("無訪問權限!")
except IOError as e:print(f"I/O錯誤: {str(e)}")

七、實用技巧

1. 逐行處理大文件
with open("large_log.txt", "r") as f:for line in f:if "ERROR" in line:print(f"發現錯誤: {line.strip()}")
2. CSV 文件操作
import csv# 寫入CSV
with open("data.csv", "w", newline='') as f:writer = csv.writer(f)writer.writerow(["Name", "Age"])writer.writerow(["Alice", 30])# 讀取CSV
with open("data.csv", "r") as f:reader = csv.reader(f)for row in reader:print(row)
3. JSON 文件操作
import jsondata = {"name": "Bob", "age": 25}# 寫入JSON
with open("data.json", "w") as f:json.dump(data, f, indent=2)# 讀取JSON
with open("data.json", "r") as f:loaded_data = json.load(f)

八、性能優化

  1. 緩沖區控制

    # 增大緩沖區提升大文件讀寫性能
    with open("data.txt", "r", buffering=65536) as f:pass
    
  2. 內存映射文件

    import mmapwith open("large_file.bin", "r+b") as f:mm = mmap.mmap(f.fileno(), 0)mm[1024:1028] = b"TEST"  # 直接修改內存映射mm.close()
    

九、常見陷阱

  1. 文件未關閉

    # 錯誤示例:異常導致文件未關閉
    f = open("data.txt", "r")
    # ... 可能拋出異常的代碼 ...
    f.close()  # 可能無法執行
    
  2. 路徑分隔符

    # 錯誤示例:硬編碼路徑分隔符
    bad_path = "folder" + "\\" + "file.txt"  # Windows特定
    # 正確做法:使用os.path.join
    
  3. 編碼問題

    # 錯誤示例:未指定編碼導致亂碼
    f = open("data.txt", "r")  # 使用系統默認編碼
    # 正確做法:明確指定encoding參數
    

通過掌握這些內容,可以高效處理從簡單文本讀寫到復雜二進制數據操作的各種場景。實際應用中需根據需求選擇合適的模式和方法,并特別注意資源管理和異常處理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904379.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904379.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904379.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Twin Builder 中的電池等效電路模型仿真

電池單元熱設計挑戰 電池熱管理的主要挑戰之一是確保溫度低于最大工作限值。較高的溫度會導致效率降低、加速老化和潛在的安全隱患。工程師必須了解電池產生的熱量,才能充分設計冷卻系統。 了解和預測電池模塊的熱行為需要將電池的熱損耗與電池單元的電氣機械特性…

一種基于條件生成對抗網絡(cGAN)的CT重建算法

簡介 簡介:該文提出了一種基于條件生成對抗網絡(cGAN)的CT重建算法,通過引入CBAM注意力機制增強網絡對關鍵特征的提取能力,有效解決了CT成像中因噪聲干擾導致的重建精度下降問題。實驗采用固體火箭發動機模擬件數據集,將正弦圖分為五組并添加不同程度的噪聲進行訓練。結…

【Redis篇】linux 7.6安裝單機Redis7.0(參數優化詳解)

💫《博主主頁》: 🔎 CSDN主頁 🔎 IF Club社區主頁 🔥《擅長領域》:擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控;并對SQLserver、NoSQL(MongoDB)有了…

【BUG】‘DetDataSample‘ object has no attribute ‘_gt_sem_seg‘

問題: 使用mmdetection框架使用COCO格式訓練自定義數據集時,其中模型使用HTC模型時出現如下問題: AttributeError: ‘DetDataSample’ object has no attribute ‘_gt_sem_seg’. Did you mean: ‘gt_sem_seg’? results self(**data, mode…

Java日期格式化方法總結

在Java中,日期格式化主要涉及將 Date、LocalDate、LocalDateTime 等日期時間對象轉換為指定格式的字符串,或將字符串解析為日期對象。以下是兩種常用的日期格式化方式: 一、使用 SimpleDateFormat(舊版API,Java 8之前&…

【NLP】27. 語言模型訓練以及模型選擇:從預訓練到下游任務

語言模型訓練:從預訓練到下游任務 本文詳細講解大型語言模型(LLMs)是如何訓練的,包括不同的模型類型(Encoder、Decoder、Encoder-Decoder),以及各類預訓練任務的原理、對比、適用場景&#xff0…

通過 ModernBERT 實現零樣本分類的性能提升

文本分類 是機器學習中最基礎的任務之一,擁有悠久的研究歷史和深遠的實用價值。更重要的是,它是許多實際項目中不可或缺的組成部分,從搜索引擎到生物醫學研究都離不開它。文本分類方法被廣泛應用于科學論文分類、用戶工單分類、社交媒體情感分…

基于SpringBoot網上書店的設計與實現

pom.xml配置文件 1. 項目基本信息(沒什么作用) <groupId>com.spring</groupId> <!--項目組織標識&#xff0c;通常對應包結構--> <artifactId>boot</artifactId> <!--項目唯一標識--> <version>0.0.1-SNAPSHOT</ve…

STM32H743單片機實現ADC+DMA多通道檢測+事件組

在上個文章基礎上改用事件組進行處理&#xff0c;以便實時任務。 stm32cubeMX自動生成代碼 osEventFlagsId_t adctestEventHandle; const osEventFlagsAttr_t adctestEvent_attributes {.name "adctestEvent" };adctestEventHandle osEventFlagsNew(&adctest…

AI Agent開發第57課-AI用在銷售歸因分析場景中-用隨機森林從0構建自己的“小模型”

開篇 在前一篇《機器學習的基礎-線性回歸如何應用在商業場景中》里,我們說到了如果我們只是簡單的分析和預測一下投入廣告費用和銷售額增長是否存在必然關系,我們用了線性回歸法得到了分析,得到的分析結果極其精準,以及提到了:如果當銷售因素是非線性的并且有著額外一些如…

Linux運維——Vim技巧三

Vim技巧 一、按 按模 模式 式匹 匹配 配及 及按 按原 原義 義匹 匹配1.1、調整查找模式的大小寫敏感性1.2、按正則表達式查找時&#xff0c;使用 \v 模式開關1.3、按原義查找文本時&#xff0c;使用 \V 原義開關1.4、使用圓括號捕獲子匹配1.5、界定單詞的邊界1.6、界定匹配的邊…

NLTK庫(1): 數據集-語料庫(Corpus)

1.簡介 NLTK &#xff08;Natural Language Toolkit&#xff09; 是自然語言處理&#xff08;NLP&#xff09;任務的 Python 庫&#xff0c;內置大量NLP數據集與計算包。 NLP數據集也叫語料庫 (Corpus), 若無特殊格式或標記&#xff0c;數據集通常來自txt等文本文件。 本教程…

spring詳解-循環依賴的解決

Spring循環依賴 重點提示&#xff1a; 本文都快寫完了&#xff0c;發現“丈夫” 的英文是husband… 在“②有AOP循環依賴” 改過來了&#xff0c;前面用到的位置太多了就沒改。我是說怎么idea的hansband英文下面怎么有波浪線。各位能夠理解意思就行&#xff0c;英文拼寫不要過…

隨機快速排序算法

一、隨機化原理 經典快速排序 選取固定的“樞軸”&#xff08;通常取第一個或最后一個元素&#xff09;&#xff0c;在最壞情況下&#xff08;如已經有序&#xff09;會退化為 。 隨機快速排序 在每次分區前隨機地從當前區間 [p..r] 中等概率選取一個樞軸&#xff0c;將它與末…

數據可視化與分析

數據可視化的目的是為了數據分析&#xff0c;而非僅僅是數據的圖形化展示。 項目介紹 項目案例為電商雙11美妝數據分析&#xff0c;分析品牌銷售量、性價比等。 數據集包括更新日期、ID、title、品牌名、克數容量、價格、銷售數量、評論數量、店名等信息。 1、數據初步了解…

美團Java高級配送員面經分享|玩梗版

美團Java高級配送員面經分享&#xff01;純玩梗&#xff01;

在windows中卸載mysql

一、停止服務 winR快捷鍵 -->> 輸入services.msc -->> 進入服務窗口關閉Mysql服務 二、卸載程序&#xff08;可選&#xff09; 如果是通過解壓壓縮包安裝的則跳過這一步&#xff0c;如果是使用.msi文件驅動安裝則需要卸載 控制面板 -->> 程序和功能 -->…

https://juejin.cn/editor/drafts/7262346366541070395

.Net Core從零學習搭建權限管理系統教程 推薦一組WPF自定義控件開源項目。 項目簡介 這是基于WPF開發的&#xff0c;為開發人員提供了一組方便使用自定義組件&#xff0c;并提供了各種常用的示例。 包含組件&#xff1a;數據表格、屬性列表、樹形列表、選色器、單選框列表、…

三、網絡管理

網絡管理 一、IP地址 原理&#xff1a; 定義與作用&#xff1a;IP 地址是互聯網協議地址&#xff0c;用于在網絡中唯一標識一臺設備。它如同現實生活中的家庭住址&#xff0c;確保數據能準確無誤地從源設備傳輸到目標設備。地址分類&#xff1a;IP 地址分為 IPv4 和 IPv6 兩種…

Auto.js 腳本:清理手機數據但保留賬號

Auto.js 腳本&#xff1a;清理手機數據但保留賬號 以下是一個使用 Auto.js 實現的腳本&#xff0c;它可以幫你清理手機數據&#xff08;類似恢復出廠設置&#xff09;&#xff0c;同時盡可能保留已登錄的賬號狀態。請注意&#xff0c;這個腳本不能完全等同于真正的恢復出廠設置…