使用 Python 讀寫(xiě)文件
每種編程語(yǔ)言處理文件數(shù)據(jù)的方式不盡相同,Python 是這么干的。
有些數(shù)據(jù)是臨時(shí)的,它們?cè)趹?yīng)用程序運(yùn)行時(shí)存儲(chǔ)在內(nèi)存中,然后丟棄。但是有些數(shù)據(jù)是持久的。它們存儲(chǔ)在硬盤(pán)驅(qū)動(dòng)器上供以后使用,而且它們通常是用戶最關(guān)心的東西。對(duì)于程序員來(lái)說(shuō),編寫(xiě)代碼讀寫(xiě)文件是很常見(jiàn)的,但每種語(yǔ)言處理該任務(wù)的方式都不同。本文演示了如何使用 Python 處理文件數(shù)據(jù)。
安裝 Python
在 Linux 上,你可能已經(jīng)安裝了 Python。如果沒(méi)有,你可以通過(guò)發(fā)行版軟件倉(cāng)庫(kù)安裝它。例如,在 CentOS 或 RHEL 上:
$ sudo dnf install python3
在 macOS 上,你可以使用 MacPorts 或 Homebrew 安裝。在 Windows 上,你可以使用 Chocolatey 安裝。
一旦安裝了 Python,打開(kāi)你最喜歡的文本編輯器,準(zhǔn)備好寫(xiě)代碼吧。
使用 Python 向文件中寫(xiě)入數(shù)據(jù)
如果你需要向一個(gè)文件中寫(xiě)入數(shù)據(jù),記住有三個(gè)步驟:
- 打開(kāi)
- 寫(xiě)入
- 關(guān)閉
這與你在計(jì)算機(jī)上編碼、編輯照片或執(zhí)行其他操作時(shí)使用的步驟完全相同。首先,打開(kāi)要編輯的文檔,然后進(jìn)行編輯,最后關(guān)閉文檔。
在 Python 中,過(guò)程是這樣的:
f = open('example.txt', 'w')
f.write('hello world')
f.close()
這個(gè)例子中,第一行以寫(xiě)模式打開(kāi)了一個(gè)文件,然后用變量 f
表示,我使用了 f
是因?yàn)樗?Python 代碼中很常見(jiàn),使用其他任意有效變量名也能正常工作。
在打開(kāi)文件時(shí),有不同的模式:
w
代表寫(xiě)入r+
代表可讀可寫(xiě)a
表示追加
第二行表示向文件中寫(xiě)入數(shù)據(jù),本例寫(xiě)入的是純文本,但你可以寫(xiě)入任意類(lèi)型的數(shù)據(jù)。
最后一行關(guān)閉了文件。
使用 with
語(yǔ)法寫(xiě)入數(shù)據(jù)
對(duì)于快速的文件交互,常用有一種簡(jiǎn)短的方法可以寫(xiě)入數(shù)據(jù)。它不會(huì)使文件保持打開(kāi)狀態(tài),所以你不必記得調(diào)用 close()
函數(shù)。相反,它使用 with
語(yǔ)法:
with open('example.txt', 'a') as f:
f.write('hello open source')
使用 Python 讀取數(shù)據(jù)
如果你或你的用戶需要通過(guò)應(yīng)用程序需要向文件中寫(xiě)入一些數(shù)據(jù),然后你需要使用它們,那么你就需要讀取文件了。與寫(xiě)入類(lèi)似,邏輯一樣:
- 打開(kāi)
- 讀取
- 關(guān)閉
同樣的,這個(gè)邏輯反映了你一開(kāi)始使用計(jì)算機(jī)就已知的內(nèi)容。閱讀文檔,你可以打開(kāi)、閱讀,然后關(guān)閉。在計(jì)算機(jī)術(shù)語(yǔ)中,“打開(kāi)”文件意味著將其加載到內(nèi)存中。
實(shí)際上,一個(gè)文本文件內(nèi)容肯定不止一行。例如,你需要讀取一個(gè)配置文件、游戲存檔或樂(lè)隊(duì)下一首歌曲的歌詞,正如你打開(kāi)一本實(shí)體書(shū)時(shí),你不可能立刻讀完整本書(shū),代碼也只能解析已經(jīng)加載到內(nèi)存中的文件。因此,你可能需要遍歷文件的內(nèi)容。
f = open('example.tmp', 'r')
for line in f:
print(line)
f.close()
示例的第一行指明使用 讀 模式打開(kāi)一個(gè)文件,然后文件交由變量 f
表示,但就像你寫(xiě)數(shù)據(jù)一樣,變量名是任意的。f
并沒(méi)有什么特殊的,它只是單詞 “file” 的最簡(jiǎn)表示,所以 Python 程序員會(huì)經(jīng)常使用它。
在第二行,我們使用了 line
,另一個(gè)任意變量名,用來(lái)表示 f
的每一行。這告訴 Python 逐行迭代文件的內(nèi)容,并將每一行的內(nèi)容打印到輸出中(在本例中為終端或 IDLE)。
使用 with
語(yǔ)法讀取數(shù)據(jù)
就像寫(xiě)入一樣,使用 with
語(yǔ)法是一種更簡(jiǎn)短的方法讀取數(shù)據(jù)。即不需要調(diào)用 close()
方法,方便地快速交互。
with open('example.txt', 'r') as f:
for line in f:
print(line)
文件和 Python
使用 Python 有很多方法向文件寫(xiě)入數(shù)據(jù),包括用 JSON、YAML、TOML 等不同的格式寫(xiě)入。還有一個(gè)非常好的內(nèi)置方法用于創(chuàng)建和維護(hù) SQLite 數(shù)據(jù)庫(kù),以及許多庫(kù)來(lái)處理不同的文件格式,包括 圖像、音頻和視頻等。