Python文件讀寫操作詳解
Python 文件的讀寫操作
1. 打開文件 open()
在 Python 中,文件操作的基本函數(shù)是 open()
,它用于打開一個文件并返回一個文件對象,通過該對象可以對文件進(jìn)行讀取和寫入操作。open()
函數(shù)有兩個常用參數(shù):
file
:表示文件的路徑,可以是相對路徑或絕對路徑。mode
:表示文件打開的模式,決定了文件的操作方式。語法
:
open(file, mode)
1.1 常見的打開模式
模式 | 說明 |
---|---|
r | 只讀模式(默認(rèn))。文件必須存在,否則拋出 FileNotFoundError。 |
w | 寫模式。文件如果存在則覆蓋,不存在則創(chuàng)建新文件。 |
a | 追加模式。文件若存在,則在文件末尾追加內(nèi)容;若文件不存在,創(chuàng)建新文件。 |
x | 排他性創(chuàng)建模式。若文件已存在,拋出 FileExistsError。 |
b | 二進(jìn)制模式,用于處理非文本文件,如圖片等。 |
t | 文本模式(默認(rèn))。用于讀取或?qū)懭胛谋疚募?/td> |
r+ | 讀寫模式。文件必須存在,可以同時進(jìn)行讀取和寫入。 |
w+ | 寫讀模式。文件如果存在會被覆蓋,不存在則創(chuàng)建新文件。 |
a+ | 追加讀寫模式。可以讀寫文件,文件若不存在則創(chuàng)建新文件。 |
1.2 示例
假如example.txt的文件內(nèi)容為:hello world
為舉例
# 只讀模式打開文件 file = open('example.txt', 'r') print(file) print(file.read()) #會輸出example.txt的文件內(nèi)容 file.close() #關(guān)閉文件
輸出:
<_io.TextIOWrapper name='example.txt' mode='r' encoding='cp65001'> hello world
1.3 代碼及輸出解釋:
open('example.txt', 'r')
:打開了一個名為example.txt
的文件,以只讀模式 ('r'
) 打開file.read()
:在file
對象上調(diào)用read()
方法,用于讀取文件的所有內(nèi)容file.close()
在file對象上調(diào)用close()
方法,用于關(guān)閉文件,是為了確保資源被釋放<_io.TextIOWrapper ...>
:TextIOWrapper
是 Python 內(nèi)部用于處理文本文件的類name='example.txt'
:這是文件對象的名稱,表示文件路徑。mode='r'
:以只讀模式r
打開文件(即只能讀取文件內(nèi)容,不能修改)。encoding='cp65001'
:這是文件的編碼方式為cp65001
(cp65001
是 UTF-8 編碼的一個別名)
2. 使用 with 語句
with
語句提供了一個更簡潔的方式來管理文件資源。使用 with
語句時,Python 會自動管理文件的打開和關(guān)閉。無論文件操作是否成功,文件都會在操作結(jié)束后自動關(guān)閉。
2.1 with 語句的優(yōu)點(diǎn)
- 自動管理資源,避免忘記關(guān)閉文件。
- 即使發(fā)生異常,也能保證文件被正確關(guān)閉。
- 代碼更簡潔。
語法:
with open('文件路徑', '模式') as 打開后賦值的變量名: 空四格(寫打開文件后進(jìn)行的操作代碼)
2.2 示例
with open('example.txt', 'r') as file: content = file.read() print(content) #輸出hello world
as file
:文件對象賦值給變量file
;可以理解為使用open
函數(shù)這樣寫:
file=open('example.txt', 'r')
- 在上面的例子中,文件在
with
語句結(jié)束后會自動關(guān)閉文件。
3. 讀取文件內(nèi)容
Python 提供了幾種方法來讀取文件內(nèi)容:
read()
:讀取整個文件的內(nèi)容,返回一個字符串。readline()
:逐行讀取文件,每次返回一行內(nèi)容。readlines()
:讀取文件的所有行并返回一個列表。- 假設(shè)
example.txt
的文件內(nèi)容為:
hello wrold hello wrold hello wrold hello wrold hello wrold
3.1 read() 示例 返回全部內(nèi)容
with open('example.txt', 'r') as file: content = file.read() # 讀取整個文件 print(content)
輸出示例:
hello wrold hello wrold hello wrold hello wrold hello wrold
3.2 readline() 示例 每次返回第一行內(nèi)容
with open('example.txt', 'r') as file: line = file.readline() # 讀取第一行 print(line)
輸出示例:
hello wrold
3.3 readlines() 示例 以列表的形式返回全部數(shù)據(jù)
with open('example.txt', 'r') as file: lines = file.readlines() # 讀取所有行,返回一個列表 print(lines)
輸出示例:
['hello wrold\n', 'hello wrold\n', 'hello wrold\n', 'hello wrold\n', 'hello wrold']
4. 寫入文件
文件的寫入操作使用 write()
或 writelines()
方法:
write()
:將字符串寫入文件,如果文件存在則覆蓋。writelines()
:將字符串列表寫入文件,只能字符串類型的數(shù)據(jù)列表,否則報錯
4.1 write() 示例 將字符串寫入文件
with open('output.txt', 'w') as file: #w模式文件如果存在則覆蓋,不存在則創(chuàng)建新文件 file.write('Hello, Python!')
output.txt
文件內(nèi)容:
Hello, Python!
4.2 writelines() 示例 將字符串列表寫入文件
lines = ['Hello, Python!\n', 'This is another line.\n'] with open('output.txt', 'w') as file: file.writelines(lines)
output.txt
文件內(nèi)容(因添加\n
故而換行):
Hello, Python! This is another line.
4.3 追加寫入
with open('output.txt', 'a') as file: file.write('Appending a new line.')
output.txt
文件內(nèi)容:
Hello, Python!This is another line. Appending a new line.
PS:如果寫入的內(nèi)容需要換行可以在字符串里面添加\n
開頭添加換行例如:file.write('\nAppending a new line.')
4.4 二進(jìn)制寫模式 wb
- 含義:以二進(jìn)制模式寫入文件。如果文件存在,內(nèi)容會被覆蓋;如果文件不存在,則創(chuàng)建文件
- 用途:適用于寫入非文本文件,如圖像、音頻文件等
with open('output.jpg', 'wb') as file: file.write(content) # 將content內(nèi)容以二進(jìn)制形式寫入
4.5 二進(jìn)制追加模式 ab
- 含義:以二進(jìn)制模式向文件追加內(nèi)容。如文件不存在,會創(chuàng)建文件;反之會添加到文件的末尾
- 用途:適用于不斷向文件中追加數(shù)據(jù)(二進(jìn)制數(shù)據(jù)等)容易出問題,一般wb即可
with open('output.jpg', 'ab') as file: file.write(content) # 將content新內(nèi)容追加到文件末尾
5. 完整案例:日志文件管理
假設(shè)我們有一個日志文件,每次程序運(yùn)行時都會記錄一個日志條目,記錄程序的執(zhí)行情況。下面是一個完整的示例:
# 寫入日志 def write_log(log_message): with open('logfile.txt', 'a') as log_file: log_file.write(log_message + '\n') # 讀取日志 def read_logs(): with open('logfile.txt', 'r') as log_file: logs = log_file.readlines() return logs # 示例用法 write_log('日志數(shù)據(jù)1') write_log('日志數(shù)據(jù)2') # 讀取并顯示日志 logs = read_logs() print("Logs:") for log in logs: print(log.strip())
解釋:
- write_log函數(shù):將日志信息追加到
logfile.txt
文件中。 - read_logs函數(shù):讀取
logfile.txt
中的所有日志,并返回列表。 - 通過運(yùn)行程序,生成三條日志,并將其打印出來。
總結(jié)
- 文件操作模式:選擇合適的模式(如
r
、w
、a
等)進(jìn)行文件的讀取或?qū)懭搿?/li> with
語句:提供了簡潔且安全的文件操作方式,自動處理文件的關(guān)閉。- 文件讀取與寫入:掌握
read()
、readline()
、write()
、writelines()
等方法,靈活處理文件內(nèi)容。
通過這些基礎(chǔ)的文件操作,你可以高效地處理文件讀寫任務(wù),同時確保代碼簡潔且安全。
以上就是Python文件讀寫操作詳解的詳細(xì)內(nèi)容,更多關(guān)于Python文件讀寫操作的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python一行sql太長折成多行并且有多個參數(shù)的方法
今天小編就為大家分享一篇python一行sql太長折成多行并且有多個參數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07Python使用Matplotlib實現(xiàn)創(chuàng)建動態(tài)圖形
動態(tài)圖形是使可視化更具吸引力和用戶吸引力的好方法,它幫助我們以有意義的方式展示數(shù)據(jù)可視化,本文將利用Matplotlib實現(xiàn)繪制一些常用動態(tài)圖形,希望對大家有所幫助2024-02-02python 哈希表實現(xiàn)簡單python字典代碼實例
這篇文章主要介紹了python 哈希表實現(xiàn)簡單python字典代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09如何實現(xiàn)在pycharm中將.ui文件轉(zhuǎn)化為.py文件
這篇文章主要介紹了如何實現(xiàn)在pycharm中將.ui文件轉(zhuǎn)化為.py文件,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-06-06Python一直報錯SyntaxError:invalid?syntax的解決辦法
SyntaxError: invalid syntax 這個報錯經(jīng)常遇見,但是總感覺自己的代碼沒有問題,根據(jù)報錯提示的行也找不到錯誤,這些情況以及解決方法都有哪些呢?這篇文章主要給大家介紹了關(guān)于Python一直報錯SyntaxError:invalid?syntax的解決辦法,需要的朋友可以參考下2022-09-09python實現(xiàn)ModBusTCP協(xié)議的client功能
Modbus TCP 是一種基于 TCP/IP 協(xié)議棧的 Modbus 通信協(xié)議,它用于在工業(yè)自動化系統(tǒng)中進(jìn)行設(shè)備之間的通信,只要通過pymodbus或pyModbusTCP任意模塊就可以實現(xiàn),本文采用pymodbus,感興趣的朋友跟隨小編一起看看吧2023-10-10Python實現(xiàn)識別文字中的省市區(qū)并繪圖
在做NLP(自然語言處理)相關(guān)任務(wù)時,經(jīng)常會遇到需要識別并提取省、城市、行政區(qū)的需求。今天給大家介紹一個模塊,你只需要把字符串傳遞給這個模塊,他就能給你返回這個字符串內(nèi)的省、市、區(qū)關(guān)鍵詞,快來學(xué)習(xí)一下吧2022-06-06Python時間差中seconds和total_seconds的區(qū)別詳解
今天小編就為大家分享一篇Python時間差中seconds和total_seconds的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12Tornado服務(wù)器中綁定域名、虛擬主機(jī)的方法
這篇文章主要介紹了Tornado服務(wù)器中綁定域名、虛擬主機(jī)的方法,本人查看了Tornado才得的方法,特此分享,需要的朋友可以參考下2014-08-08