Python - 文件部分

- 第 101 篇 -
Date: 2025 - 05 - 26
Author: 鄭龍浩/仟墨

Python - 文件部分

學習時間: 2025-05-19

文章目錄

  • Python - 文件部分
  • 一 文件與路徑
    • 1 文本文件
    • 2 二進制文件
    • 3 編碼格式
      • ① 常見編碼格式
      • ② 指定編碼格式
      • ③ 最佳格式
      • ④ 處理編碼錯誤
    • 4 絕對路徑
    • 5 相對路徑
      • 基本寫法
      • 返回上級目錄
      • 組合路徑
  • 二 操作文件的函數和方法
  • 三 操作文件基本套路
  • 四 文件指針
    • 1 文件指針的基本介紹
    • 2 注意:第二次調用 read 方法的時候讀取不到內容
    • 3 `seek(offset, whence)`和 `tell()`
  • 五 打開文件的方式
    • 1 基本語法
    • 2 訪問方式
  • 六 讀取文件內容
    • (1)一次性讀取文件內容
    • (2)`readline`按行讀取文件內容
      • 1 前言
      • 2 `readline` 方法
    • (3)使用`for lline int file`遍歷文件內容
    • (4)`read(n)` 與 `readline(n)` 可以寫參數,`n`表示讀取多少個字符
      • `file.read(5)`只打印前5個字符
  • 七 文件復制
    • 1 小文件復制
      • (1 )步驟
      • (2 )具體實現
    • 2 大文件復制
      • (1)步驟
      • (2)具體實現
  • 八 文件/目錄的常用管理操作
    • 1 基本介紹
    • 2 文件操作
    • 3 目錄操作
  • 九 自動關閉文件的方法
    • 1 打開一個文件
    • 2 同時打開多個文件
  • 十 文件刷新

一 文件與路徑

1 文本文件

  • 可以使用 文本編輯軟件 查看的文件
  • 本質上還是二進制文件
  • C 的源文件,Python 的源文件 也是文本文件
  • \r 表示回車
  • \n 表示換行

2 二進制文件

  • 保存的內容不可直接給人閱讀,而是使用提供的 其他專門的 軟件 內容才能讓人看懂

    比如要看圖片,要用專門的軟件打開 圖片閱讀文件,音頻和視頻同理

  • Eg: 圖片文件、音頻文件、視頻文件…

  • 二進制文件不能直接使用 文本文件軟件 進行查看,比如不能使用 記事本 直接打開圖片或者視頻,否則會亂碼

3 編碼格式

① 常見編碼格式

  • ASCII: 最早的編碼,只能表示英文字符和一些特殊符號
  • UTF-8: 最常用的Unicode編碼,可以表示幾乎所有語言的字符
  • GBK: 中文編碼,主要用于簡體中文
  • ISO-8859-1: 西歐語言編碼

② 指定編碼格式

在Python中打開文件時,可以通過encoding參數指定編碼格式:

# 以UTF-8編碼打開文件
file = open("example.txt", "r", encoding="utf-8")# 以GBK編碼打開文件
file = open("example.txt", "r", encoding="gbk")

③ 最佳格式

  • 推薦使用UTF-8編碼,它是跨平臺、跨語言的最佳選擇

  • 在Python文件開頭添加編碼聲明:

    # -*- coding: utf-8 -*-
    

④ 處理編碼錯誤

# 忽略無法解碼的字符
with open('file.txt', 'r', encoding='utf-8', errors='ignore') as f:content = f.read()# 替換無法解碼的字符
with open('file.txt', 'r', encoding='utf-8', errors='replace') as f:content = f.read()

4 絕對路徑

路徑分為絕對路徑、相對路徑

  • 絕對路徑:從文件系統的根目錄開始的完整路徑

    C:\Users\Name\Documents\file.txt
    在Python讀取的時候斜杠要反著來
    C:/Users/Name/Documents/file.txt
    

5 相對路徑

基本寫法

  • file.txt - 當前目錄下的文件
  • data/file.txt - 當前目錄的data子目錄中的文件
  • ./config.ini - 顯式表示當前目錄下的文件(等同于config.ini

返回上級目錄

  • ../ - 返回上一級目錄
    • ../settings.ini - 上級目錄中的文件
    • ../../file.txt - 上兩級目錄中的文件

組合路徑

  • ../logs/app.log - 上級目錄的logs子目錄中的文件
  • ./../shared/data.txt - 先當前目錄,再上級,然后進入shared目錄

二 操作文件的函數和方法

Python 中操作文件需要記住1個函數和3個方法

函數方法說明
函數open打開文件,并且返回文件操作對象
方法read將文件內容讀取到內存
方法write將指定內容寫入文件
方法close關閉文件
方法find查找內容,返回索引

三 操作文件基本套路

  1. 打開文件

    open函數的第一個參數是要打開的文件名(文件名區分大小寫)

    • 如果文件存在,返回文件操作對象
    • 如果文件不存在,會拋出異常
  2. 讀、寫文件

    • 讀:將文件內容讀入內存

      read方法可以一次性讀入返回文件的所有內容

    • 寫:將內存內存寫入文件

      write

  3. 關閉文件

    close方法負責關閉文件

    • 如果忘記關閉文件,會造成系統資源耗盡,而且會影響到后續對文件的訪問
    • 方法執行后,會把文件指針移動到文件的末尾

三個步驟

# 1 打開文件
file = open("文件路徑", '打開方式', encoding='文件編碼')
# 2 讀取
text = file.read()
# 3 關閉
file.close() # 千萬不要忘記關閉文件

四 文件指針

1 文件指針的基本介紹

  • 文件指針標記從哪個位置開始讀取數據

  • 第一次打開文件的時候,通常文件指針會之指向文件的開始位置

  • 當執行了 read 方法后,文件指針會移動到讀取內容的末尾

    默認情況下會移動到 文件末尾

2 注意:第二次調用 read 方法的時候讀取不到內容

  • 如果執行了一次 read 方法,讀取了所有的內容,那么再次調用 read 方法的時候,不可以獲取到內容!!!!
  • 因為 第一次讀取之后,文件指針移動到了文件的末尾,再次調用的時候是從文件的末尾開始讀取的,所以不會讀取到任何的內容

3 seek(offset, whence)tell()

  • seek(offset, whence):移動文件指針
    • whence=0:從文件開頭計算(默認)
    • whence=1:從當前位置計算
    • whence=2:從文件末尾計算
  • tell():返回當前文件指針位置
with open('file.txt', 'r') as f:print(f.tell())  # 輸出:0f.seek(5)  # 移動到第5個字節print(f.tell())  # 輸出:5

五 打開文件的方式

1 基本語法

open 函數默認以 只讀方式 打開文件,并且返回文件對象

file = open("文件路徑", "訪問方式", "文件編碼")

2 訪問方式

  • 如果只需要讀的話,第二個參數可以不用寫
訪問方式說明
r只讀 的方式打開文件。如果文件存在,文件指針將會放在文件的開頭,這是默認模式。如果文件不存在,會拋出異常
w只寫 的方式打開文件。如果文件存在,如果寫入,文件內容會被覆蓋。如果文件不存在,創建新的文件
a追加 的方式打開文件。如果文件存在,文件指針將會放在文件的結尾。如果文件不存在,創建新的文件進行寫入
r+讀寫 的方式打開文件。如果文件存在,文件指針將會放在文件的開頭。如果文件不存在,會拋出異常
w+讀寫 的方式打開文件。如果文件存在,如果寫入,文件內容會被覆蓋。如果文件不存在,創建新的文件進行寫入
a+讀寫 的方式打開文件。如果文件存在,文件指針將會放在文件的結尾。如果文件不存在,創建新的文件進行寫入

頻繁的移動文件指針,會影響文件的讀寫效率,開發中更多的時候會以 只讀、只寫 的方式來操作文件

六 讀取文件內容

(1)一次性讀取文件內容

# 打開文件,并讓file存儲文件指針
file = open('源文件') # 或 open('文件', 'r')  效果是等效的test = file.read() 
print(test)
# 關閉文件(必須執行)
file.close()# 打印結果
1234567
abcde
aaaaa
bbbbbbbbb

(2)readline按行讀取文件內容

1 前言

  • read 方法默認會把文件的 所有內容一次性讀取到內存
  • 如果文件太大,對內存的占用會非常嚴重

2 readline 方法

  • readline方法可以一次讀取一行的內容
  • readline方法執行后,會把 文件指針 移動到 下一行,準備下次讀取
  • readline方法可以利用循環也可以把一個很大的文件一次性讀取出來

“源文件”文件

1234567
abcde
aaaaa
bbbbbbbbb

test1.py文件

# 打開文件,并讓file存儲文件指針
file = open('源文件') # 或 open('文件', 'r')  效果是等效的
while True:# 每次循環,讀取一行test = file.readline() # 如果讀取到末尾的時候,返回空字符串''# 判斷是否讀取到內容  如果文件指針指向結尾,則braekif not test: # 如果 not '' 則為 Truebreakprint(test, end = '')
# 關閉文件(必須執行)
file.close()# 打印結果
1234567
abcde
aaaaa
bbbbbbbbb

(3)使用for lline int file遍歷文件內容

# 打開文件,并讓file存儲文件指針
file = open('源文件') # 或 open('文件', 'r')  效果是等效的
for line in file:print(line, end = '') # 如果寫的是 print(line) 會每一行下面多打印行空格,因為print會自動打印一行空格
# 關閉文件(必須執行)
file.close()# 打印結果
1234567
abcde
aaaaa
bbbbbbbbb

(4)read(n)readline(n) 可以寫參數,n表示讀取多少個字符

file.read(5)只打印前5個字符

# 打開文件,并讓file存儲文件指針
file = open('源文件') # 或 open('文件', 'r')  效果是等效的test = file.read(5)  # 只打印前5行
print(test)
# 關閉文件(必須執行)
file.close()# 打印結果
12345

七 文件復制

1 小文件復制

(1 )步驟

  1. 打開源文件和目標文件
    • 源文件以只讀方式打開
    • 目標文件以只寫方式打開
  2. 將原文件的中的內容讀取出來
  3. 將讀取出來的內容寫入到目標文件
  4. 關閉兩個文件

(2 )具體實現

源文件

1234567
abcde
aaaaa
bbbbbbbbb

目標文件

復制以后,該文件內容與源文件相同

test2.py

# 1 打開文件
file_read = open('源文件')
file_write = open('目標文件', 'w')
# 2 讀寫文件
text = file_read.read()
text2 = file_write.write(text)
# 3 關閉打開的
file_read.close()
file_write.close()

2 大文件復制

因為文件太大,如果一次性讀取出來的話會占用大量的內存空間,所以分行復制,一行一行的復制

(1)步驟

  1. 打開源文件和目標文件
    • 源文件以只讀方式打開
    • 目標文件以只寫方式打開
  2. 按照一行一行的形式將源文件中的內容復制到目標文件當中去
  3. 關閉兩個文件

(2)具體實現

# 1 打開文件
file_read = open('源文件')
file_write = open('目標文件', 'w')
# 2 讀寫文件
while True:# 讀取一行內容text = file_read.readline()# 文件指針指向末尾,退出循環if not text:breaktext2 = file_write.write(text)
# 3 關閉打開的
file_read.close()
file_write.close()

八 文件/目錄的常用管理操作

1 基本介紹

  • 在終端/文件瀏覽器中可以執行常規的 文件 / 目錄 管理操作,例如:

    創建、重命名、刪除、改變路徑、查看目錄內容…

  • Python中,如果用上面的功能的話,需要導入 os 模塊

2 文件操作

方法名說明例子
rename重命名文件os.rename(源文件名,目標文件名)
remove刪除文件os.remove(文件名)

3 目錄操作

如下操作中,文件或者目錄操作都支持 相對路徑絕對路徑

方法名說明例子
listdir目標列表os.listdir(目標名)
mikdir創建目錄os.mikdir(目標名)
rmdir刪除目錄os.rmdir(目標名)
getcwd獲取當前目錄os.getcwd()
chdir修改工作目錄os.chdir(目標目錄)
path.isdir判斷是否是文件os.path.isdir(文件路徑)

九 自動關閉文件的方法

只要離開了縮進范圍,就自動關閉了

1 打開一個文件

可以不手動寫 close 方法關閉文件

with open('test.txt', 'r', encoding='utf-8') as file:content = file.read()print(content)
# 文件已自動關閉

2 同時打開多個文件

with open('input.txt', 'r') as infile, open('output.txt', 'w') as outfile:data = infile.read()outfile.write(data.upper())
# 兩個文件都已自動關閉

十 文件刷新

一般來說不需要手動刷新

下面三種情況需要

  • 實時日志記錄:如果程序可能崩潰,希望日志立即寫入硬盤,而不是一直在內存緩沖區

    with open("debug.log", "a") as f:f.write("Error: something went wrong!\n")f.flush()  # 確保日志立即寫入,即使程序崩潰
    
  • 長時間運行的文件寫入:如果文件長時間不關閉,但希望內容盡快寫入硬盤。

    也就是如果大文件需要分批次寫入,就需要每隔一段時間就刷新一次。

    file = open("data.txt", "w")
    for i in range(1000000):file.write(f"Line {i}\n")if i % 1000 == 0:file.flush()  # 每1000行刷一次,避免內存占用過高
    file.close()
    
  • 多進程/多線程共享文件:如果另一個進程需要立即讀取剛寫入的內容,但文件尚未關閉

下面的情況不需要手動刷新

  • 正常情況:用 with 語句或正確調用了 close(),數據一定會寫入硬盤,無需手動 flush()
  • 小文件寫入:如果寫入的數據量小,緩沖區很快填滿,系統會自動刷新。
  • 程序正常退出:Python 在程序結束時會自動刷新所有緩沖區

刷新步驟

# 1 打開文件
file = open("XX")
# 2 讀取
text = file.read()
# 3 刷新
flie.flush()
# 4 關閉
file.close() # 千萬不要忘記關閉文件

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

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

相關文章

R語言開始繪圖--柱狀圖

R語言是一種專門用于統計計算和圖形顯示的編程語言,廣泛應用于數據分析、統計建模、數據可視化等領域。它由Ross Ihaka和Robert Gentleman于1993年在新西蘭奧克蘭大學開發,現已成為數據科學和統計學領域的重要工具。 R語言的特點 R語言具有豐富的統計和…

PYTORCH_CUDA_ALLOC_CONF基本原理和具體示例

PYTORCH_CUDA_ALLOC_CONFmax_split_size_mb 是 PyTorch 提供的一項環境變量配置,用于控制 CUDA 顯存分配的行為。通過指定此參數,可以有效管理 GPU 顯存的碎片化,緩解因顯存碎片化而導致的 “CUDA out of memory”(顯存溢出&#…

Halcon仿射變換---個人筆記

文章目錄 1.概述2.仿射變換類型3.仿射變換流程4.根據特征點、角度計算仿射變換矩陣4.1 從空變換矩陣創建仿射變換矩陣4.2 把旋轉角度添加到仿射變換矩陣4.3 把縮放添加到仿射變換矩陣4.4 把平移添加到防射變換矩陣4.5 把斜切添加到仿射變換矩陣4.6 根據點和角度計算剛性仿射變換…

《深度掌控Linux:openEuler、CentOS、Debian、Ubuntu的全方位運維指南》

《深度掌控Linux:openEuler、CentOS、Debian、Ubuntu的全方位運維指南》 一、引言 在當今數字化的時代背景下,Linux操作系統憑借其卓越的性能、可靠性和開源的優勢,在服務器、云計算、嵌入式系統等眾多領域占據著舉足輕重的地位。對于IT運維…

【Webtrees 用戶手冊】第 2 章 - 訪客須知

Webtrees 用戶手冊/訪客指南 信 第 2 章 - 訪客須知 <- 章節概述 目錄 1頁面結構2標題菜單 2.1主題 2.1.1云2.1.2顏色2.1.3絕佳2.1.4最小2.1.5網絡樹2.1.6西妮婭 2.2語言2.3登記2.4搜索字段 3主菜單 3.1家譜3.2圖表3.3列表3.4日歷3.5報告3.6尋找3.7故事3.8常見問題 (FAQ) 4…

動態規劃-918.環形子數組的最大和-力扣(LeetCode)

一、題目解析 聽著有點復雜&#xff0c;這里一圖流。 將環形問題轉化為線性問題。 二、算法原理 1.狀態表示 2.狀態轉移方程 詳細可以移步另一篇博客&#xff0c;53. 最大子數組和 - 力扣&#xff08;LeetCode&#xff09; 3.初始化 由于計算中需要用到f[i-1]和g[i-1]的值&…

飛牛fnNAS遠程映射盤符

目錄 一、NAS、PC端配置Zerotier 二、使用網上鄰居 三、使用WebDAV 1.開啟WebDAV 2.PC上安裝RaiDrive并設置 如果能將NAS作為本機一個盤符來使用,一定會令我非常方便。如果是本地,可以很方便實現。 將飛牛NAS映射為本地盤符,常用兩種方式,一種是網上鄰居,另一種是We…

華為2025年校招筆試手撕真題教程(二)

一、題目 大灣區某城市地鐵線路非常密集&#xff0c;乘客很難一眼看出選擇哪條線路乘坐比較合適&#xff0c;為了解決這個問題&#xff0c;地鐵公司希望你開發一個程序幫助乘客挑選合適的乘坐線路&#xff0c;使得乘坐時間最短&#xff0c;地鐵公司可以提供的數據是各相鄰站點…

SAP ABAP VK11/VK12 創建銷售物料價格(附源碼)

需求: 通過接口批量創建銷售物料的價格(含階梯價),對應事務碼VK11/VK12 方法:(會在下面源碼寫出各個方法的優缺點,僅供參考) 通過函數 RV_CONDITION_COPY創建(目前最優)通過函數 BAPI_PRICES_CONDITIONS通過BDC錄屏使用VK11事務碼進行創建分析: 通過測試可發現,VK…

噪聲建模在一小時:最小化準備工作的自監督低光RAW圖像去噪

論文標題: Noise Modeling in One Hour: Minimizing Preparation Efforts for Self-supervised Low-Light RAW Image Denoising發表日期: 2025年5月作者: Feiran Li, Haiyang Jiang*, Daisuke Iso發表單位: Sony Research, Tokyo University原文鏈接: https://arxiv.org/pdf/25…

Puppeteer 瀏覽器自動化操作工具

pyppeteer 是 Python 版本的 Puppeteer&#xff0c;而 Puppeteer 是由 Google 開發的一個 Node.js 庫&#xff0c;用于控制 Chrome 或 Chromium 瀏覽器。pyppeteer 允許你通過 Python 代碼自動化操作瀏覽器&#xff0c;實現網頁爬取、自動化測試、生成截圖或 PDF 等功能。 核心…

接口性能測試-工具JMeter的學習

接口登錄鏈接http://111.230.19.204:8080/blog_login.html 一、JMeter基本使用流程 1、啟動Jmeter 2、在“測試計劃”下添加線程組 3、在“線程組”下添加“HTTP”取樣器 4、填寫“HTTP請求”的相關請求數據 5、在“線程組”下添加“查看結果樹”監聽器 6、點擊“啟動”按鈕…

mybatis-plus與jsqlparser共用時報sql解析錯誤

手動引入jsqlparser-4.6版本&#xff0c;但mybatis-plus中引用為4.4版本 解決方法一&#xff1a; jsqlparser版本與mybatis-plus中引用版本一致。 解決方法而二&#xff1a; 排除掉mybatis-plus中的jsqlparser。

用MMdetection框架訓練自己的數據集(全流程實戰)

前面我們準備好了COCO格式的數據集&#xff1a;將YOLO格式的數據集轉換為mmdetection格式-CSDN博客https://blog.csdn.net/qq_54708219/article/details/148224187?spm1001.2014.3001.5501 下面我們使用MMdetection開始訓練。 1.創建新的數據集類 首先&#xff0c;在mmdet/d…

VS Code中Maven未能正確讀取`settings.xml`中配置的新路徑

在VS Code中Maven未能正確讀取settings.xml中配置的新路徑&#xff0c;通常是由于以下原因導致的&#xff1a; 一、VS Code未使用你修改的settings.xml文件 VS Code的Maven插件可能使用了默認配置或指向其他settings.xml文件。解決方法&#xff1a; 手動指定settings.xml路徑…

2021年認證杯SPSSPRO杯數學建模A題(第二階段)醫學圖像的配準全過程文檔及程序

2021年認證杯SPSSPRO杯數學建模 A題 醫學圖像的配準 原題再現&#xff1a; 圖像的配準是圖像處理領域中的一個典型問題和技術難點&#xff0c;其目的在于比較或融合同一對象在不同條件下獲取的圖像。例如為了更好地綜合多種信息來辨識不同組織或病變&#xff0c;醫生可能使用…

RPM之(1)基礎使用

RPM之(1)基礎使用 Author: Once Day Date: 2025年5月26日 一位熱衷于Linux學習和開發的菜鳥&#xff0c;試圖譜寫一場冒險之旅&#xff0c;也許終點只是一場白日夢… 漫漫長路&#xff0c;有人對你微笑過嘛… 全系列文章可參考專欄: Linux實踐記錄_Once-Day的博客-CSDN博客 …

國內可做大批量pcb的工廠有哪些?

在電子產業升級浪潮中&#xff0c;PCB作為電子設備的基礎載體&#xff0c;其批量生產能力直接決定著終端產品的市場響應速度與品質穩定性。本文精選五家具備核心競爭力的廠商&#xff0c;從工藝深度、產能規模到服務模式展開剖析&#xff0c;為采購決策提供專業參考。 獵板PCB…

【視頻】使用海康SDK保存的MP4無法在瀏覽器(html5)中播放

1、問題描述 在使用海康 SDK 的 NET_DVR_SaveRealData 接口&#xff0c;將視頻流保存成MP4文件后&#xff0c;通過瀏覽器無法播放MP4&#xff0c;播放其它的MP4正常。 2、原因分析 對比可以正常播放的MP4 和 無法播放的MP4文件&#xff0c;比較它們的詳細信息&#xff0c;發…

AI時代新詞-生成對抗網絡(GAN)

一、什么是生成對抗網絡&#xff08;GAN&#xff09;&#xff1f; 生成對抗網絡&#xff08;Generative Adversarial Network&#xff0c;簡稱GAN&#xff09;是一種由生成器&#xff08;Generator&#xff09;和判別器&#xff08;Discriminator&#xff09;組成的深度學習模…