Python3中處理和操作純文本文件的詳細(xì)教程
簡(jiǎn)介
Python 是一個(gè)處理數(shù)據(jù)的強(qiáng)大工具。編程中最常見的任務(wù)之一就是讀取、寫入或操作數(shù)據(jù)。因此,了解如何處理存儲(chǔ)不同類型數(shù)據(jù)的不同文件格式尤為重要。
例如,考慮一個(gè)檢查用戶訪問控制列表的 Python 程序。你的用戶列表可能存儲(chǔ)在一個(gè)文本文件中,允許你檢查訪問權(quán)限或修改權(quán)限。使用 Python,能夠打開、讀取、寫入和關(guān)閉文件將有助于處理此類任務(wù)。
本教程將簡(jiǎn)要描述 Python 能夠處理的一些文件格式。在簡(jiǎn)要介紹這些文件格式之后,你將學(xué)習(xí)如何在 Python 3 中打開、讀取和寫入文本文件。完成后,你將能夠處理 Python 中的任何純文本文件。
先決條件
在進(jìn)行本教程之前,你應(yīng)該已經(jīng)安裝了 Python 3,并在計(jì)算機(jī)上設(shè)置了本地編程環(huán)境。如果還沒有這樣做,你可以按照適用于你操作系統(tǒng)的相應(yīng)安裝和設(shè)置指南進(jìn)行設(shè)置:
- Ubuntu 22.04 或 Debian 8
- CentOS 7
- Mac OS X
- Windows 10
背景
Python 非常靈活,可以輕松處理多種不同的文件格式,包括但不限于以下內(nèi)容:
文件類型 | 描述 |
---|---|
純文本 | 純文本文件存儲(chǔ)表示僅包含字符(或字符串)的數(shù)據(jù),并排除任何結(jié)構(gòu)化元數(shù)據(jù) |
CSV | 逗號(hào)分隔值文件使用逗號(hào)(或其他分隔符)來結(jié)構(gòu)化存儲(chǔ)的數(shù)據(jù),允許數(shù)據(jù)以表格格式保存 |
HTML | 超文本標(biāo)記語言文件存儲(chǔ)用于由瀏覽器顯示的結(jié)構(gòu)化數(shù)據(jù),通常與網(wǎng)站一起使用 |
JSON | JavaScript 對(duì)象表示法是一種簡(jiǎn)單高效的格式,使其成為存儲(chǔ)和傳輸結(jié)構(gòu)化數(shù)據(jù)最常用的格式之一 |
本教程將重點(diǎn)介紹如何處理純文本文件。
步驟 1 —— 創(chuàng)建文本文件
在我們開始在 Python 中工作之前,我們需要確保有一個(gè)要處理的文件。為此,請(qǐng)打開你的代碼編輯器,并創(chuàng)建一個(gè)名為 days.txt
的新純文本文件。
在新文件中,輸入幾行文本,列出一周的天數(shù):
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
接下來,保存你的文件,并記下其位置。在本例中,我們的用戶 sammy 將文件保存在 /home/sammy/days.txt
。這在后續(xù)步驟中將非常重要,因?yàn)槲覀儗⒃?Python 中打開該文件。
現(xiàn)在你已經(jīng)有了要處理的文件,可以開始編寫代碼了。
步驟 2 —— 打開文件
在你的代碼編輯器中,創(chuàng)建一個(gè)新的 Python 文件,并將其命名為 files.py
。
要在 Python 中打開一個(gè)文件,我們首先需要一種將磁盤上的文件與 Python 中的變量關(guān)聯(lián)的方法。這個(gè)過程稱為打開文件,而變量稱為文件句柄。我們首先告訴 Python 文件的位置。文件的位置通常被稱為文件路徑 —— 在本例中是 /home/sammy/days.txt。創(chuàng)建一個(gè)變量來存儲(chǔ)這個(gè)路徑信息。
path = '/home/sammy/days.txt'
現(xiàn)在,你可以使用 Python 的 open() 函數(shù)來打開我們的 days.txt 文件。open() 函數(shù)需要文件路徑作為其第一個(gè)參數(shù)。該函數(shù)還接受許多其他參數(shù)。然而,最重要的是可選的 mode 參數(shù)。這是一個(gè)可選的字符串,指定打開文件的模式。你選擇的模式將取決于你希望對(duì)文件進(jìn)行的操作。以下是一些可用的模式:
'r'
:用于從文件中讀取數(shù)據(jù)'w'
:用于向文件中寫入數(shù)據(jù)'a'
:用于向文件中追加數(shù)據(jù)'r+'
:用于在同一文件中進(jìn)行讀取和寫入
在本例中,我們只想從文件中讀取數(shù)據(jù),因此我們將使用 'r'
模式。使用 open()
函數(shù)打開 days.txt
文件,并將生成的文件句柄分配給變量 days_file
。
days_file = open(path, 'r')
現(xiàn)在你已經(jīng)打開了文件,接下來的步驟將指導(dǎo)你讀取其內(nèi)容。
步驟 3 —— 讀取文件
由于我們已經(jīng)打開了文件,現(xiàn)在可以通過分配給它的變量來操作它(即從中讀?。?。Python 提供了三種相關(guān)的操作來從文件中讀取信息。讓我們花點(diǎn)時(shí)間了解一下它們各自是如何工作的。
使用 read
第一個(gè)操作 read()
返回整個(gè)文件的內(nèi)容作為一個(gè)字符串。例如:
days_file.read()
結(jié)果將是:
'Monday\nTuesday\nWednesday\nThursday\nFriday\nSaturday\nSunday\n'
使用 readline
第二個(gè)操作 readline()
返回文件的下一行,包括下一個(gè)換行符在內(nèi)的文本。簡(jiǎn)單來說,這個(gè)操作將逐行讀取文件。
days_file.readline()
結(jié)果將是:
'Monday\n'
一旦使用 readline
操作讀取了一行,文件的當(dāng)前讀取位置將移動(dòng)到下一行。如果再次調(diào)用這個(gè)操作,它將返回文件中的下一行,如下所示:
days_file.readline()
'Tuesday\n'
使用 readlines
最后一個(gè)操作 readlines()
返回文件中每一行的列表,其中列表的每個(gè)項(xiàng)目代表一行。
days_file.readlines()
['Monday\n', 'Tuesday\n', 'Wednesday\n', 'Thursday\n', 'Friday\n', 'Saturday\n', 'Sunday\n']
在讀取文件時(shí)需要記住的一點(diǎn)是,一旦使用了其中一個(gè)讀取操作,就不能再次讀取文件。例如,如果首先運(yùn)行 days_file.read(),然后是 days_file.readlines(),第二個(gè)操作將返回一個(gè)空字符串。因此,每當(dāng)你想要從文件中讀取時(shí),你必須首先打開一個(gè)新的文件變量或使用 seek() 方法,這超出了本教程的范圍。如果你想了解更多,Python 對(duì)這些方法有很好的文檔。
現(xiàn)在我們已經(jīng)從文件中讀取了內(nèi)容,讓我們學(xué)習(xí)如何寫入新文件。
步驟 4 —— 寫入文件
在這一步中,你將寫入一個(gè)新文件,其中包括標(biāo)題 Days of the Week,后面跟著第一個(gè)文件的內(nèi)容。首先,創(chuàng)建一個(gè) title
變量。
title = 'Days of the Week\n'
你還需要將一周的天數(shù)存儲(chǔ)在一個(gè)變量中,我們將其稱為 days
。這段代碼以讀模式打開文件,讀取文件,并將讀取操作返回的輸出存儲(chǔ)在我們的新變量 days
中。為了更容易理解,步驟 2 中的代碼已經(jīng)包含在內(nèi)。
path = '/home/sammy/days.txt' days_file = open(path, 'r') days = days_file.read()
現(xiàn)在你有了標(biāo)題和一周的天數(shù)的變量,你可以開始寫入新文件。首先,指定文件的位置。同樣,我們將使用目錄 /home/sammy/
,所以我們的路徑將是 /home/sammy/new_days.txt
。然后,你可以使用 open()
函數(shù)以寫模式打開新文件,指定 'w'
模式。
new_path = '/home/sammy/new_days.txt' new_days = open(new_path, 'w')
一旦打開了新文件,你可以使用 write() 方法添加數(shù)據(jù)。這個(gè)方法接受一個(gè)字符串參數(shù),并將該數(shù)據(jù)寫入文件。如果你想在文件中開始新的一行,你必須顯式提供換行符 \n,這在你將 'Days of the Week\n' 賦給 title 變量時(shí)已經(jīng)包含在內(nèi)。
將標(biāo)題寫入文件,然后是一周的天數(shù)。可能有助于添加一些 print 語句來跟蹤我們要寫入文件的內(nèi)容,這通常用于跟蹤腳本的進(jìn)度。
new_days.write(title) print(title) new_days.write(days) print(days)
最后,當(dāng)你完成對(duì)文件的操作時(shí),關(guān)閉文件是很重要的。
步驟 5 —— 關(guān)閉文件
關(guān)閉文件確保磁盤上的文件與文件句柄之間的連接已經(jīng)結(jié)束。關(guān)閉文件還確保其他程序能夠訪問它們,并保持你的數(shù)據(jù)安全。如果你沒有像 步驟 6 中描述的那樣使用 with
語句,一定要確保關(guān)閉你的文件。在這個(gè)例子中,使用 close()
方法關(guān)閉所有文件。
days_file.close() new_days.close()
現(xiàn)在腳本完成了對(duì)文件的操作,它使用 close()
方法釋放了文件句柄。
步驟 6 —— 使用 with 語句(可選)
在 Python 中處理文件的推薦方式(通常稱為Pythonic方式)是使用語言的一個(gè)特性,稱為 with 語句。這些語句是設(shè)置一個(gè)上下文進(jìn)行工作的簡(jiǎn)寫方式,一旦上下文結(jié)束,最終的細(xì)節(jié)將自動(dòng)處理,以防止常見的錯(cuò)誤。在處理文件的情況下,with 語句將自動(dòng)關(guān)閉文件,這樣一旦你完成任務(wù),就不會(huì)有文件句柄殘留。
與 Python 中的任何塊一樣,比如函數(shù)定義、if 語句或循環(huán),with 語句采用一個(gè)簡(jiǎn)單語句后跟一個(gè) :,然后是一個(gè)縮進(jìn)的代碼塊。下面是一個(gè)打開文件并打印其內(nèi)容的代碼示例:
with open('/home/sammy/days.txt', 'r') as days_file: days = days_file.read() print(days)
讓我們逐步了解這段代碼的作用。與之前一樣,我們使用 Python 的內(nèi)置 open() 函數(shù)打開文件,傳遞文件路徑和模式參數(shù)。然而,由于我們使用了 with 語句,而不是使用 = 將結(jié)果的文件句柄分配給一個(gè)變量,我們使用 as 關(guān)鍵字進(jìn)行分配。這是完整 with 語句語法的一部分:
with action as result: . . .
在 : 之后,我們移到下一行并縮進(jìn)我們的代碼,這是 Python 組織功能塊的方式。與之前一樣,我們可以在 days_file 變量中訪問文件句柄,因此我們可以調(diào)用 read() 方法來獲取所有內(nèi)容,并將其 print() 出來。
請(qǐng)注意,這里沒有調(diào)用 close() 方法。這是因?yàn)橐坏┐a離開這個(gè)塊(也就是說,一旦下一行的代碼不再縮進(jìn),或者文件結(jié)束了),with 語句的上下文就知道自動(dòng)關(guān)閉這些文件。這樣做的好處不僅在于你不需要記住每次都關(guān)閉文件,而且你處理特定文件的所有邏輯在該塊內(nèi)視覺上和邏輯上都是清晰的。這種結(jié)構(gòu)有助于保持代碼的清晰和可讀性。
有了這個(gè)理解,讓我們使用 with 語句重新編寫我們之前的代碼:
with open(path, 'r') as days_file, open(new_path, 'w') as new_days: days = days_file.read() new_days.write(title) new_days.write(days) print(title) print(days)
現(xiàn)在代碼更加有組織。我們首先像之前一樣定義了一些變量:我們兩個(gè)文件的路徑和我們將用于新文件標(biāo)題的標(biāo)題。之后,我們開始我們的 with 語句,打開我們的兩個(gè)文件,并將它們的連接存儲(chǔ)在適當(dāng)命名的變量中。與之前一樣,我們讀取了 days_file 的內(nèi)容,然后將標(biāo)題和這些內(nèi)容寫入了 new_days。最后,我們通過取消縮進(jìn)代碼塊來結(jié)束該塊,以打印我們讀取的 title 和 days 的值。
雖然有一些情況下你會(huì)想要使用之前描述的 close() 方法,而且了解它的工作原理很重要,但在 Python 中處理文件時(shí),你通常會(huì)使用 with 語句。
步驟 7 — 檢查我們的代碼
在運(yùn)行代碼之前,最好確保一切看起來都是正確的。最終的產(chǎn)品應(yīng)該是這樣的:
path = '/home/sammy/days.txt' new_path = '/home/sammy/new_days.txt' title = 'Days of the week\n' with open(path, 'r') as days_file, open(new_path, 'w') as new_days: days = days_file.read() new_days.write(title) new_days.write(days) print(title) print(days)
保存代碼后,打開終端并運(yùn)行你的 Python 腳本,就像這樣:
python files.py
輸出將如下所示:
Days of the Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
現(xiàn)在,通過打開新文件(new_days.txt
)來完全檢查代碼是否運(yùn)行正常。如果一切順利,它應(yīng)該包含以下內(nèi)容:
Days of the Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
結(jié)論
在本教程中,我們學(xué)習(xí)了如何在 Python 3 中處理和操作純文本文件?,F(xiàn)在你可以在 Python 中打開、讀取、寫入和關(guān)閉文件,并且可以繼續(xù)在 Python 中處理自己的數(shù)據(jù)。Python 在處理輸入和輸出時(shí)提供了許多其他有用的方法,并且還提供了文檔以便進(jìn)一步學(xué)習(xí)。
以上就是Python3中處理和操作純文本文件的詳細(xì)教程的詳細(xì)內(nèi)容,更多關(guān)于Python3處理和操作文本文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python多線程實(shí)現(xiàn)動(dòng)態(tài)圖繪制
這篇文章主要介紹了python多線程實(shí)現(xiàn)動(dòng)態(tài)圖繪制,文章基于Python的相資料展開動(dòng)態(tài)圖的繪制相關(guān)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-04-04Python實(shí)現(xiàn)視頻字幕時(shí)間軸格式轉(zhuǎn)換的示例
本文主要介紹了Python實(shí)現(xiàn)視頻字幕時(shí)間軸格式轉(zhuǎn)換的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11Python 根據(jù)日志級(jí)別打印不同顏色的日志的方法示例
這篇文章主要介紹了Python 根據(jù)日志級(jí)別打印不同顏色的日志的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Flask框架 CSRF 保護(hù)實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Flask框架 CSRF 保護(hù)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Flask-WTF針對(duì)CSRF攻擊的防護(hù)相關(guān)操作技巧,需要的朋友可以參考下2019-10-10Python實(shí)例練習(xí)水仙花數(shù)問題講解
這篇文章介紹了Python找水仙花數(shù)從分析到實(shí)現(xiàn)的過程,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05django 使用 request 獲取瀏覽器發(fā)送的參數(shù)示例代碼
這篇文章主要介紹了django 使用 request 獲取瀏覽器發(fā)送的參數(shù)示例代碼,獲取數(shù)據(jù)有四種方式,具體內(nèi)容詳情大家跟隨腳本之家小編一起看看吧2018-06-06一文帶你了解Python 四種常見基礎(chǔ)爬蟲方法介紹
這篇文章主要介紹了一文帶你了解Python 四種常見基礎(chǔ)爬蟲方法介紹,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12numpy和pandas中數(shù)組的合并、拉直和重塑實(shí)例
今天小編就為大家分享一篇numpy和pandas中數(shù)組的合并、拉直和重塑實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06