Python開發 —— 文件讀寫操作open與with open

????????在 Python 中,文件讀寫操作是非常常見的任務。本文是一些關鍵操作和代碼示例,包括如何使用 `open`、`with open`、`read` 和 `write` 函數進行文件操作。

1. 打開文件 (open)

????????使用 open?函數打開文件。在 Python 中,打開文件是進行文件操作的第一步。使用 open?函數可以打開文件,并返回一個文件對象。這個文件對象可以用于后續的讀寫操作。

????????以下是關于 open?函數的詳細解釋和示例。

1.1 open?函數的基本語法

file_object = open(file_name, mode)

????????- file_name:文件的名稱或路徑(字符串)。
????????- mode:文件打開的模式(字符串),常見模式如下:

? - `'r'`:只讀模式。文件必須存在,否則會拋出 `FileNotFoundError`。
? - `'w'`:寫入模式。若文件不存在,會創建一個新文件;若文件存在,會截斷(清空)文件。
? - `'a'`:追加模式。若文件不存在,會創建一個新文件;若文件存在,寫入的數據會追加到文件末尾。
? - `'b'`:二進制模式。可以與其他模式結合使用,如 `'rb'`(二進制只讀),`'wb'`(二進制寫入),`'ab'`(二進制追加)。
? - `'+'`:讀寫模式。可以與其他模式結合使用,如 `'r+'`(讀寫),`'w+'`(寫讀),`'a+'`(追加讀寫)。

1.2?示例

1.2.1?只讀模式('r')

????????只讀模式用于讀取文件內容,文件必須存在。

try:file = open('example.txt', 'r')print('File opened successfully')
except FileNotFoundError:print('File not found')
finally:file.close()

1.2.2?寫入模式('w')

????????寫入模式用于寫入文件內容,如果文件存在,則會清空文件內容;如果文件不存在,則會創建一個新文件。

file = open('example.txt', 'w')
file.write('This is a test.')
file.close()

1.2.3?追加模式('a')

????????追加模式用于在文件末尾追加內容,如果文件不存在,則會創建一個新文件。

file = open('example.txt', 'a')
file.write('\nThis is an appended line.')
file.close()

1.2.4?二進制模式('b')

????????二進制模式用于處理非文本文件,如圖像或其他二進制數據。

# 二進制只讀模式
file = open('example.jpg', 'rb')
data = file.read()
file.close()# 二進制寫入模式
file = open('example_copy.jpg', 'wb')
file.write(data)
file.close()
```

1.2.5 讀寫模式('+')

????????讀寫模式用于同時讀取和寫入文件。文件必須存在,除非使用寫讀模式('w+')或追加讀寫模式('a+')。

# 讀寫模式(文件必須存在)
file = open('example.txt', 'r+')
content = file.read()
file.write('\nThis is added text.')
file.close()# 寫讀模式(文件不存在會創建,存在則清空)
file = open('example.txt', 'w+')
file.write('This is new content.')
file.seek(0)
content = file.read()
file.close()# 追加讀寫模式(文件不存在會創建,存在則追加)
file = open('example.txt', 'a+')
file.write('\nThis is appended content.')
file.seek(0)
content = file.read()
file.close()

2. with open

2.1 open?函數的基本語法

????????使用 with open?語句可以確保文件在使用后自動關閉,這是一種更安全的文件操作方式。

with open('example.txt', 'r') as file:# 進行文件操作content = file.read()print(content)
# 在 with 語句塊結束后,文件會自動關閉

2.2 詳細示例

????????以下是一個更詳細的示例,展示了不同模式下如何打開文件:

# 示例:只讀模式(文件必須存在)
try:with open('example.txt', 'r') as file:content = file.read()print('Read content:', content)
except FileNotFoundError:print('File not found')# 示例:寫入模式(會覆蓋現有文件)
with open('example.txt', 'w') as file:file.write('New content written.\n')# 示例:追加模式(追加到現有文件末尾)
with open('example.txt', 'a') as file:file.write('This line is appended.\n')# 示例:二進制模式讀取和寫入
with open('example.jpg', 'rb') as file:binary_data = file.read()with open('example_copy.jpg', 'wb') as file:file.write(binary_data)# 示例:讀寫模式(文件必須存在)
try:with open('example.txt', 'r+') as file:content = file.read()print('Original content:', content)file.write('Additional content.\n')
except FileNotFoundError:print('File not found')# 示例:寫讀模式(文件不存在會創建)
with open('example.txt', 'w+') as file:file.write('New content.\n')file.seek(0)content = file.read()print('Written and read content:', content)# 示例:追加讀寫模式(文件不存在會創建)
with open('example.txt', 'a+') as file:file.write('Appended content.\n')file.seek(0)content = file.read()print('Appended and read content:', content)

????????通過這些示例,您可以深入理解如何在 Python 中使用不同模式打開和操作文件,確保正確讀寫文件內容并安全關閉文件。

3. 對比 open 和 with open

????????在 Python 中,`open` 和 `with open` 都可以用于打開文件,但它們在處理文件的方式和資源管理上有顯著區別。以下是兩者的詳細對比:

3.1 open?函數?

????????open?函數是最基礎的文件打開方法。使用 open?函數打開文件后,必須顯式調用 close?方法關閉文件,以釋放資源。如果忘記關閉文件,可能會導致資源泄漏或文件被鎖定。

3.1.1 優點

????????更加靈活,可以手動控制文件的打開和關閉。
????????適用于需要復雜文件操作的場景。

3.1.2 缺點

????????容易忘記調用 close?方法,導致資源泄漏。
????????需要額外的代碼來確保文件在出現異常時也能被正確關閉。

3.1.3? 示例

try:file = open('example.txt', 'r')content = file.read()print(content)
finally:file.close() ?# 確保文件被關閉

????????在這個例子中,文件必須在 try?塊結束后顯式關閉,即使在讀取文件過程中發生異常也要關閉文件。這種顯式管理文件資源的方法增加了代碼的復雜性。

3.2?with open 語句

????????with open語句是上下文管理器的一部分,確保文件在使用結束后自動關閉。with open?語句簡化了文件操作,避免了顯式調用 close?方法,即使發生異常,文件也會被正確關閉。

3.2.1 優點

????????自動管理文件資源,確保文件被正確關閉。

????????代碼更簡潔,減少了管理文件資源的代碼量。

????????更安全,避免了資源泄漏。

3.2.2?缺點

????????對于需要非常復雜的文件管理場景,可能不如 `open` 函數靈活。

3.2.3 示例

with open('example.txt', 'r') as file:content = file.read()print(content)
# 文件會在 with 語句塊結束后自動關閉

????????在這個例子中,with open 語句確保文件在讀取完內容后自動關閉,即使在讀取過程中發生異常也是如此。這樣減少了顯式管理文件資源的復雜性。

3.3 對比總結

特性openwith open
文件關閉管理需要顯式調用 `close` 方法自動關閉文件
代碼簡潔性需要更多代碼管理文件資源更加簡潔
異常處理需要額外的代碼確保文件在異常時關閉自動處理異常
靈活性適用于復雜的文件操作適用于大多數文件操作場景

3.4 實踐中的對比

3.4.1 使用 open?管理文件資源

try:file = open('example.txt', 'r')content = file.read()print(content)
finally:file.close() ?# 確保文件被關閉

????????這個例子中,顯式調用 file.close()?確保文件被正確關閉,但增加了代碼量和復雜性。

3.4.2 使用 with open 管理文件資源

with open('example.txt', 'r') as file:content = file.read()print(content)
# 文件會在 with 語句塊結束后自動關閉

????????這個例子中,with open 自動管理文件關閉,代碼更簡潔、安全。

3.5?結論

????????在大多數情況下,推薦使用 with open?語句來打開文件,因為它能自動管理文件資源,確保文件在使用結束后被正確關閉,減少了資源泄漏的風險和代碼的復雜性。然而,對于需要非常復雜的文件操作場景,可能需要使用 open?函數進行更精細的控制。

4. 讀取文件 (read)

????????可以使用 `read` 方法讀取文件的內容。常見的讀取方法包括:

????????read():讀取整個文件。

????????readline():讀取文件中的一行。????????

????????readlines():讀取文件中的所有行,并返回一個列表。

4.1 示例

????????讀取整個文件的內容:

with open('example.txt', 'r') as file:content = file.read()print(content)

????????讀取文件中的一行:

with open('example.txt', 'r') as file:line = file.readline()print(line)

????????讀取文件中的所有行:

with open('example.txt', 'r') as file:lines = file.readlines()for line in lines:print(line)

5. 寫入文件 (write)

????????可以使用 write?方法將數據寫入文件。注意,如果文件以 w?模式打開,寫入操作會覆蓋文件的現有內容。

5.1 示例

????????寫入字符串到文件:

with open('example.txt', 'w') as file:file.write('Hello, World!')

????????追加字符串到文件:

with open('example.txt', 'a') as file:file.write('\nHello again!')

????????寫入多行數據:

lines = ['First line\n', 'Second line\n', 'Third line\n']
with open('example.txt', 'w') as file:file.writelines(lines)

6. 綜合示例

????????以下是一個綜合示例,展示了如何打開文件、讀取文件內容、寫入文件內容以及使用 with open?語句。

# 讀取文件內容
with open('example.txt', 'r') as file:content = file.read()print('File content before writing:')print(content)# 寫入新內容到文件(覆蓋模式)
with open('example.txt', 'w') as file:file.write('New content line 1\n')file.write('New content line 2\n')# 追加內容到文件
with open('example.txt', 'a') as file:file.write('Appended line 1\n')file.write('Appended line 2\n')# 再次讀取文件內容
with open('example.txt', 'r') as file:new_content = file.read()print('File content after writing:')print(new_content)

????????通過這些示例,您可以了解如何在 Python 中進行文件的讀寫操作,包括如何安全地打開和關閉文件,以及如何讀取和寫入文件內容。

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

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

相關文章

繼承與多態2

2.5(楊.丹尼爾梁英文第11版P537:*13.12)(幾何對象的面積求和)寫一個方法,將數組中所有幾何對象的面積求和。 方法簽名是: 公共靜態雙求和區域(幾何對象【】a) 編寫一個測試程序&…

高速數據傳輸新紀元?ADT-Link領先推出USB4轉PCIe 4.0橋接板

在科技飛速發展的今天,數據傳輸速度一直是推動行業進步的關鍵驅動力。最近,備受矚目的硬件制造商ADT-Link宣布推出一款引領潮流的新產品——USB4轉PCIe 4.0橋接板,這一創新設備勢必會顯著提升數據傳輸效率,為用戶帶來前所未有的高…

NI PXIe-7857R與PXIe-8842的區別

一、NI PXIe-7857R 類型: FPGA模塊:基于FPGA的可編程I/O模塊。 主要功能: FPGA處理:包含Xilinx Kintex-7 FPGA,支持自定義邏輯和處理。 I/O接口:提供豐富的模擬和數字I/O通道。 高速數據處理&#xff1a…

軟件測試新手要達到一個什么水平才能找到一份9K的工作?

我的讀者里有很多 軟測 新人,新人是指正在學 測試 的、以及工作時間不長的年輕人,他們經常問我一個問題: 自學到什么程度才能找到一份還不錯的測試工作? 今天我就從我自己面試新人的角度來回答一下,我會把面試的知識點…

查詢指定會話免打擾

查詢指定用戶(requestId) 為指定會話(targetId)的設置的免打擾狀態。 提示 該設置為用戶級別設置。對應的設置接口詳見設置指定會話免打擾。 請求方法 POST: https://數據中心域名/conversation/notification/get.json 頻率限…

AVFrame結構體分析

AVFrame是FFmpeg中的一個核心數據結構,用于表示音頻或視頻的幀。它包含了一系列用于描述幀數據和元數據的字段。以下是對AVFrame結構體的詳細分析,包括其主要字段及其作用。 AVFrame的定義 在FFmpeg的源代碼中,AVFrame的定義可以在avframe.…

Nginx網頁服務

nginx的配置: 1、全局塊:全局配置,對全局生效; 2、events塊:配置影響 Nginx 服務器與用戶的網絡連接; 3、http塊:配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置&#xf…

【Python編程實踐2/3】Python圖像處理模塊(上)

目錄 引言 目標 安裝模塊 Windows系統 macOS系統 路徑 Windows路徑 ?編輯macOS路徑 windows路徑報錯 windows路徑前的r 示例代碼 windows快速查看路徑 macOS快速查看路徑 打開圖片 展示圖片 下節預告 總結 引言 歡迎各位大佬垂閱本篇Python實踐博客&a…

【教學類-59-01】專注力視覺訓練01(圓點百數圖)

背景需求: 視覺訓練的神奇效果,讓你的寶貝成為焦點 - 小紅書魔法視覺追蹤-視覺訓練—— 🔍視覺訓練🔍 🔹想要提高寶寶的專注力,視覺訓練是個絕佳方法! 🔹讓寶寶仔細觀察數字的路線&a…

微信小程序畢業設計-農場驛站平臺系統項目開發實戰(附源碼+論文)

大家好!我是程序猿老A,感謝您閱讀本文,歡迎一鍵三連哦。 💞當前專欄:微信小程序畢業設計 精彩專欄推薦👇🏻👇🏻👇🏻 🎀 Python畢業設計…

HoneyTrap蜜罐系統實踐操作@FreeBSD

HoneyTrap介紹 HoneyTrap是一個可擴展的開源系統,用于運行、監控和管理蜜罐。 HoneyTrap蜜罐系統通過在網絡中部署感應節點,實時感知周邊網絡環境,并將感應節點的日志進行實時存儲和可視化分析,從而實現對網絡環境中威脅情況的感…

Honor of Kings 2024.03.29 Ban for 3 day

我又被舉報消極然后禁賽 都說了別選蔡文姬,對面三個肉,非要選個軟輔助 吐槽下這游戲策劃:游戲體驗感越來越差,公正也很差 對說了對面4個法師,就是不出魔抗,把把都是0-N開局,到底誰消極啊&#x…

stable Diffusion缺失模型補充地址

Hires. fix 8x_NMKD-Superscale https://huggingface.co/uwg/upscaler/resolve/main/ESRGAN/8x_NMKD-Superscale_150000_G.pth 放置位置: \models\ESRGAN

【工具使用】在vscode中用python繪圖

安裝拓展Jupyter Keymap 然后重啟vscode在代碼之前加上這個代碼,利用jupyter一行一行運行 # %%點擊Run Cell即可運行 # %% import matplotlib.pyplot as plt# 提供的數據 data [0.02856750446367257, 0.248564674096589, 0.1645266594124048, 0, 0.375108941955725…

智能臺燈系統之哪種調光方式更節能?

在節能方面,不同的調光方式有不同的表現。 PWM調光通過反復開關驅動器來控制LED燈的實際輸出功率,以達到照明調光的目的。這種方式能夠在最小電流和最大電流之間進行頻繁的切換,從而調節照明燈具的亮度。由于LED照明光源僅處于接通或關斷兩種…

通關!游戲設計之道Day18

過場動畫,或者說根本沒人看的東西 過場動畫是一系列的動畫或實時的動作序列,用來推進劇情制造大場面,烘托氣氛,展示對話和角色成長,以及顯現在某些情況下被玩家忽略的相關線索。 過場動畫是一把雙刃劍,一方…

二叉樹鏈式結構的前序_中序_后續_層序遍歷【詳細圖解】

P. S.:以下代碼均在VS2019環境下測試,不代表所有編譯器均可通過。 P. S.:測試代碼均未展示頭文件stdio.h的聲明,使用時請自行添加。 博主主頁:LiUEEEEE ??????????????????? ?? …

Excel 導入

依賴 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency> service 讀取excel文件的行數據 DataExcelListener<DeviceTemplateExcel> listener new…

MFC CList<CRect, CRect> m_listRect;的用法

CList<CRect, CRect&> 是 MFC&#xff08;Microsoft Foundation Classes&#xff09;中定義的一個雙向鏈表模板類&#xff0c;用于存儲 CRect 對象。在使用 CList 時&#xff0c;你可以執行多種操作&#xff0c;比如添加、移除、查找和遍歷元素。以下是一些常見的用法…

SAP 生產訂單報工函數BAPI_PRODORDCONF_CREATE_TT不返回報錯信息

最近財務一直反饋MES報工的數據都沒有成本,然后去查看原因發現是財務當月的KP26的價格沒有進行維護,導致沒有收集到工單的報工成本。 但是在前臺操作CO11 報工的時候,系統會給出報錯的信息 但是我們在調用函數BAPI_PRODORDCONF_CREATE_TT的時候,系統并沒有返回報錯的信息…