Python 文件操作詳解

文章目錄

  • Python 文件操作詳解
    • 一、文件操作的基本流程
    • 二、文件打開模式詳解
      • 1. 基本模式
      • 2. 擴展模式
      • 3. 模式組合示例
    • 三、文件操作方法大全
      • 1. 打開和關閉文件
      • 2. 讀取文件內容
      • 3. 寫入文件內容
      • 4. 文件指針操作
    • 四、文件編碼處理
    • 五、二進制文件操作
    • 六、常見文件操作場景
      • 1. 文件內容修改
      • 2. CSV文件處理
      • 3. JSON文件處理
    • 七、文件操作最佳實踐

Python 文件操作詳解

文件操作是編程中最基礎也是最重要的功能之一。Python 提供了豐富的文件操作方法,下面我將從基礎到高級,全面詳細地講解 Python 中的文件操作。

一、文件操作的基本流程

文件操作的三個核心步驟:

  1. 打開文件:建立程序與文件的連接
  2. 讀寫操作:讀取內容或寫入數據
  3. 關閉文件:釋放系統資源
[打開文件 open()] → [讀/寫 read()/write()] → [關閉文件 close()]

二、文件打開模式詳解

Python 的 open() 函數支持多種模式,可以通過組合使用實現不同功能:

1. 基本模式

模式描述文件指針位置文件存在文件不存在
‘r’只讀文件開頭正常打開報錯 FileNotFoundError
‘w’寫入文件開頭清空內容創建新文件
‘a’追加文件末尾保留內容創建新文件
‘x’創建文件開頭報錯 FileExistsError創建新文件

2. 擴展模式

模式描述常組合的模式
‘b’二進制模式‘rb’, ‘wb’, ‘ab’
‘t’文本模式(默認)‘rt’, ‘wt’, ‘at’
‘+’讀寫模式‘r+’, ‘w+’, ‘a+’

3. 模式組合示例

# 文本模式讀寫(默認)
f = open('file.txt', 'r')  # 等同于 'rt'# 二進制模式讀寫
f = open('image.png', 'rb')# 讀寫模式(可讀可寫)
f = open('data.txt', 'r+')  # 讀寫,文件必須存在
f = open('data.txt', 'w+')  # 讀寫,會清空文件
f = open('data.txt', 'a+')  # 讀寫,追加模式

三、文件操作方法大全

1. 打開和關閉文件

# 基本打開方式
f = open('example.txt', 'r')
try:# 文件操作content = f.read()
finally:f.close()  # 必須確保文件被關閉# 推薦使用 with 語句(上下文管理器)
with open('example.txt', 'r') as f:content = f.read()
# 離開 with 塊后文件自動關閉

2. 讀取文件內容

方法描述適用場景
read(size)讀取size字節/字符,不指定則讀取全部小文件讀取
readline()讀取一行逐行處理
readlines()讀取所有行,返回列表需要所有行時
迭代文件對象逐行讀取大文件處理
# 讀取整個文件
with open('example.txt', 'r') as f:content = f.read()  # 全部內容作為一個字符串# 逐行讀取(內存友好)
with open('large_file.txt', 'r') as f:for line in f:  # 文件對象是可迭代的print(line.strip())  # 去除首尾空白字符# 讀取特定字節數
with open('binary.data', 'rb') as f:chunk = f.read(1024)  # 讀取1024字節while chunk:  # 循環讀取直到文件結束process(chunk)chunk = f.read(1024)

3. 寫入文件內容

方法描述注意點
write(str)寫入字符串不會自動加換行
writelines(seq)寫入字符串序列序列中的字符串不會被自動處理
# 寫入字符串
with open('output.txt', 'w') as f:f.write("Hello, World!\n")  # 需要手動添加換行符f.write("這是第二行內容\n")# 寫入多行
lines = ["第一行\n", "第二行\n", "第三行\n"]
with open('lines.txt', 'w') as f:f.writelines(lines)  # 注意:不會自動添加換行符# 追加內容
with open('log.txt', 'a') as f:f.write("新的日志條目\n")

4. 文件指針操作

文件對象維護一個指針,指示當前讀寫位置:

方法描述
tell()返回當前指針位置
seek(offset, whence)移動指針到指定位置

whence 參數:

  • 0: 文件開頭(默認)
  • 1: 當前位置
  • 2: 文件末尾
with open('example.txt', 'rb+') as f:  # 必須用二進制模式才能使用非0的whenceprint(f.tell())  # 0,文件開頭f.seek(5)  # 移動到第5字節print(f.tell())  # 5f.seek(3, 1)  # 從當前位置再移動3字節print(f.tell())  # 8f.seek(-2, 2)  # 移動到文件末尾前2字節print(f.tell())  # 文件總長度-2

四、文件編碼處理

文本文件需要指定正確的編碼,常見編碼:

  • UTF-8(推薦)
  • GBK(中文Windows常用)
  • ASCII(僅基礎英文)
# 讀取不同編碼的文件
with open('gbk_file.txt', 'r', encoding='gbk') as f:content = f.read()# 寫入指定編碼的文件
with open('utf8_file.txt', 'w', encoding='utf-8') as f:f.write("這是UTF-8編碼的內容")# 處理編碼錯誤(遇到無法解碼的字符時)
with open('problematic.txt', 'r', encoding='utf-8', errors='ignore') as f:content = f.read()  # 忽略無法解碼的字符
# 其他errors參數:'replace'(用?替代), 'strict'(默認,拋出異常)

五、二進制文件操作

處理圖片、音頻、視頻等非文本文件:

# 復制二進制文件
with open('source.jpg', 'rb') as src, open('copy.jpg', 'wb') as dst:dst.write(src.read())# 分塊讀取大文件
CHUNK_SIZE = 1024 * 1024  # 1MB
with open('large_video.mp4', 'rb') as f:while True:chunk = f.read(CHUNK_SIZE)if not chunk:  # 讀取結束breakprocess_chunk(chunk)

六、常見文件操作場景

1. 文件內容修改

# 修改文件中的特定內容
with open('config.ini', 'r+') as f:lines = f.readlines()f.seek(0)  # 回到文件開頭for line in lines:if line.startswith('timeout='):f.write('timeout=300\n')  # 修改配置else:f.write(line)f.truncate()  # 截斷文件,確保刪除舊內容

2. CSV文件處理

import csv# 讀取CSV文件
with open('data.csv', 'r', newline='') as f:reader = csv.reader(f)for row in reader:print(row)# 寫入CSV文件
data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]
with open('output.csv', 'w', newline='') as f:writer = csv.writer(f)writer.writerows(data)

3. JSON文件處理

import json# 讀取JSON文件
with open('data.json', 'r') as f:data = json.load(f)print(data['key'])# 寫入JSON文件
data = {'name': 'Alice', 'age': 25, 'skills': ['Python', 'Java']}
with open('output.json', 'w') as f:json.dump(data, f, indent=4)  # indent參數美化輸出

七、文件操作最佳實踐

  1. 總是使用 with 語句:確保文件正確關閉,即使發生異常
  2. 處理大文件要分塊:避免內存不足,使用迭代或分塊讀取
  3. 明確指定編碼:特別是跨平臺應用,默認使用UTF-8
  4. 檢查文件存在性:操作前檢查os.path.exists()或捕獲異常
  5. 注意換行符差異:Windows(\r\n), Linux/macOS(\n), 使用newline=''控制
  6. 二進制模式處理行尾:二進制模式下不會轉換行尾符
# 綜合最佳實踐示例
import os
from pathlib import Pathfile_path = Path('data') / 'important.txt'try:with open(file_path, 'r+', encoding='utf-8', newline='') as f:# 讀取內容content = f.read()# 處理內容modified = content.replace('old', 'new')# 寫回文件f.seek(0)f.write(modified)f.truncate()  # 確保刪除舊內容except FileNotFoundError:print(f"錯誤:文件 {file_path} 不存在")
except PermissionError:print(f"錯誤:沒有權限訪問 {file_path}")
except UnicodeDecodeError:print(f"錯誤:文件編碼問題,嘗試其他編碼")

通過以上詳細講解,你應該對Python文件操作有了全面的了解。記住,文件操作是編程基礎,熟練掌握這些方法對日常開發非常有幫助!

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

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

相關文章

用AI配合MCP快速生成n8n工作流

在數字化時代的浪潮中,AI技術正以前所未有的速度改變著我們的生活和工作方式。從智能家居到智能辦公,從數據分析到自動化流程,AI的應用場景無處不在。今天,我們將帶你走進一個充滿創新與效率的世界,探索如何通過AI大眼…

ArkUI-X框架LogInterface使用指南

ArkUI-X框架支持日志攔截能力,Android側提供原生接口,用于注入LogInterface接口,框架日志及ts日志通過該接口輸出,本文的核心內容是介紹如何在Android平臺上有效利用ArkUI-X框架的LogInterface攔截日志。 Android平臺創建ArkUI-X…

函數重載與函數模板

函數重載與函數模板 函數重載 函數組成 返回類型 函數名稱(參數列表){函數體}函數簽名:函數名稱(參數列表) C 允許定義同名函數,前提是它們具有不同的簽名。這被稱為函數重載 。 C 編譯器通過檢查調用中參數的數量、類型和順序來選擇要調用的適當函…

NLP學習路線圖(四十六):可解釋性

在自然語言處理(NLP)技術重塑人機交互、信息檢索甚至司法決策的今天,一個尖銳的問題愈發凸顯:當模型在文本分類中判定你的貸款申請被拒,或在簡歷篩選中將你排除,你是否有權追問一句——“為什么?” 一、黑箱迷霧:NLP模型的不透明困境 現代NLP的核心驅動力——深度神經…

uniapp的app項目,在華為pad上運行,頁面顯示異常

最開始為了好調試,運行成h5在瀏覽器調試的,調完以后,放到pad上。。。天塌了,所有頁面異常,感覺被放大了好多,而且頁面很亂。。。 查了很多資料,說把px改為rpx,好,全部改…

Linux中的連接符

Linux中的&&連接符 和其它語言類似,在Shell中,&&是一個邏輯運算符,表示邏輯AND,用于連接多個條件表達式 不同的是,在Linux系統中,&&不僅可以連接條件表達式,而且還能連…

裝飾模式Decorator Pattern

模式定義 動態地給對象增加額外的職責 對象結構型模式 模式結構 Component:抽象構件 ConcreteComponent: 具體構件 Decorator:抽象裝飾類 ConcreteDecorator: 具體裝飾類 抽象裝飾類代碼 public class Decorator extends Compo…

https說明

http是無狀態的,https是在http應用層協議和tcp傳輸控制層之間加了一層,主要功能包括加密傳輸內容,校驗信息是否完整,信息是否被篡改等。http的網絡傳輸,源端應用層發送http請求,傳輸到源端的控制層&#xf…

實時操作系統(FreeRTOS、RT-Thread)RISC-V

FreeRTOS:FreeRTOS? - FreeRTOS? RT-Thread:rt-thread.org VxWorks: QNX Neutrino RTOS: RT-Linux: 一、 實時操作系統介紹 實時操作系統(Real Time Operating System,簡稱RTOS&#xff…

Python3除標準庫外更全面的XML解析方案

一、擴展解析庫方案 lxml高性能解析 from lxml import etree doc etree.parse(data.xml) # XPath 2.0增強查詢 nodes doc.xpath(//student[score>90]/name/text())優勢:支持XPath 2.0語法和XSLT轉換,比標準庫快5-10倍 BeautifulSoup混合解析 fr…

同時裝兩個MySQL, 我在MySQL5的基礎上, 安裝MySQL8

目錄 1. 前言 2. 下載MySQL 3. 安裝MySQL 3.1 第一步:選擇MySQL ?編輯 3.2 第二步:存儲地址 3.3 第三步 3.4 第四步:完成基礎配置 3.5 第五步 3.6 第六步:數據庫密碼 3.7 第七部:服務名 4. 環境變量 4.1 復制MySQL的bin地址 4.2 進入高級系統設置 4.3 PATH 4.4 更改…

Visual Studio 2022打包程序流程

Visual Studio 2022打包程序流程 打開管理拓展 安裝Microsoft Visual Studio Installer Projects 關閉軟件才能繼續安裝 安裝完成后點擊,解決方案,創建新項目 添加:setup project 打開軟件的路徑 復制路徑 添加文件 粘貼剛才復制的路徑&…

web3方法詳解

web3.py 是一個功能強大的 Python 庫,用于與以太坊區塊鏈交互。它提供了多種模塊和功能,涵蓋賬戶管理、智能合約交互、交易發送、區塊鏈數據查詢等。以下是 web3.py 的主要功能模塊及其用途: 1. Web3 核心模塊 功能:提供基礎連接、工具函數和核心功能。 常用方法: Web3(…

HTML5+JS實現一個簡單的SVG 貝塞爾曲線可視化設計器,通過幾個點移動位置,控制曲線的方向

三次貝塞爾曲線,二次貝塞爾曲線有什么區別 https://blog.csdn.net/xiaoyao961/article/details/148678265 SVG 貝塞爾曲線可視化設計器 下面是一個簡單的貝塞爾曲線可視化設計器,使用 HTML5 和 JavaScript 實現。這個設計器允許你通過拖動控制點來實時調整貝塞爾曲…

Pytorch框架——自動微分和反向傳播

一、自動微分概念 自動微分(Automatic Differentiation,AD)是一種利用計算機程序自動計算函數導數的技術,它是機器學習和優化算法中的核心工具(如神經網絡的梯度下降),通過反向傳播計算并更新梯…

【Linux手冊】進程的狀態:從創建到消亡的“生命百態”

目錄 前言 操作系統進程狀態 運行狀態 阻塞狀態 掛起狀態 Linux中具體的進程狀態 R(running)運行狀態 S(sleeping)阻塞狀態 D(disk sleep)磁盤休眠狀態 T(stopped)和t(tracing stop) X(dead)終止狀態 Z(zombie)僵尸狀態 僵尸進程的危害 前言 我們在運行可執行程序…

李沐--動手學深度學習 LSTM

1.從零開始實現LSTM #從零開始實現長短期記憶網絡 import torch from torch import nn from d2l import torch as d2l#加載時光機器數據集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps)#1.定義和初始化模型參數&#xff…

面經的疑難雜癥

1.介紹一下虛擬地址,虛擬地址是怎么映射到物理地址的? 虛擬地址是指在采用虛擬存儲管理的操作系統中,進程訪問內存時所使用的地址。每個進程都有獨立的虛擬地址空間,虛擬地址通過操作系統和硬件(如MMU,內存…

去噪擴散概率模型(DDPM)全解:從數學基礎到實現細節

一、 概述 在這篇博客文章中,我們將深入探討去噪擴散概率模型(也被稱為 DDPMs,擴散模型,基于得分的生成模型,或簡稱為自動編碼器),這可以說是AIGC最近幾年飛速發展的基石,如果你想做…

【系統分析師】2011年真題:案例分析-答案及詳解

文章目錄 試題1【問題 1】【問題 2】【問題 3】 試題2【問題 1】【問題 2】【問題 3】 試題3【問題 1】【問題 2】【問題 3】 試題4【問題 1】【問題 2】【問題 3】 試題5【問題 1】【問題 2】【問題 3】 試題1 隨著寬帶應用快速發展,用戶要求系統服務提供商提供基…