Python — 資料檔案的寫入與讀取

Photo by Alex Hadba on Unsplash

在程式的運作過程中,所有的資料都是儲存在記憶體中。一旦程式再重新執行,之前輸入的資料就會全部消失。如果沒有事先把資料儲存起來,就永遠找不到了。因此,在這裡我們要來說明如何把資料存在自己的磁碟機裡面。

回想看看,一般我們想要「將檔案儲存到磁碟機裡面」時會進行什麼步驟?大致上可以分成兩個部分:首先,需要從作業系統的檔案總管(在Mac OS上面成為Finder )來回移動我們的路徑與資料夾(目錄),找到我們想要的檔案。接著我們需要開啟檔案,讀取檔案的內容或著是把內容寫入該檔案,讀寫完畢之後,我們還要進行儲存,並且關閉檔案。這一篇,重要是說明後半部,也就是關於檔案開啟已經關閉之間的各種操作。

開啟檔案與關閉檔案

由於資料檔案的讀寫,是Python 的基本功能之一,在執行時不需要事先引入任何的模組。

開啟檔案

在Python中,如果想要開啟檔案,可以使用內建的open()函式來開啟。open()函式的功能為開啟檔案,並且傳回一個代表該檔案的file物件。

f = open('filename','r')

open()函式

翻查Python文件,可以得知open()函式可以寫入的參數如下:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

可以簡化為 open(‘檔案名稱’, ‘檔案開啟模式’, ‘其他’) 。這裏先討論前兩個參數。

open函式的第一個參數是檔案路徑名稱,第二個參數是檔案開啟模式。對於第一個參數,大家應該沒有什麼問題,我們接著看第二個參數。所謂的模式,是指關於檔案讀寫的方式,基本上常用的模式有「r」、「w」與「a」三種:

在程式的運作過程中,所有的資料都是儲存在記憶體中。一旦程式再重新執行,之前輸入的資料就會全部消失。如果沒有事先把資料儲存起來,就永遠找不到了。因此,在這裡我們要來說明如何把資料存在自己的磁碟機裡面。

回想看看,一般我們想要「將檔案儲存到磁碟機裡面」時會進行什麼步驟?大致上可以分成兩個部分:首先,需要從作業系統的檔案總管(在Mac OS上面成為Finder )來回移動我們的路徑與資料夾(目錄),找到我們想要的檔案。接著我們需要開啟檔案,讀取檔案的內容或著是把內容寫入該檔案,讀寫完畢之後,我們還要進行儲存,並且關閉檔案。這一篇,重要是說明後半部,也就是關於檔案開啟已經關閉之間的各種操作。

開啟檔案與關閉檔案

由於資料檔案的讀寫,是Python 的基本功能之一,在執行時不需要事先引入任何的模組。

開啟檔案

在Python中,如果想要開啟檔案,可以使用內建的open()函式來開啟。open()函式的功能為開啟檔案,並且傳回一個代表該檔案的file物件。

f = open('filename','r')

open()函式

翻查Python文件,可以得知open()函式可以寫入的參數如下:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None,

closefd=True, opener=None)

可以簡化為 open(‘檔案名稱’, ‘檔案開啟模式’, ‘其他’) 。這裏先討論前兩個參數。

open函式的第一個參數是檔案路徑名稱,第二個參數是檔案開啟模式。對於第一個參數,大家應該沒有什麼問題,我們接著看第二個參數。所謂的模式,是指關於檔案讀寫的方式,基本上常用的模式有「r」、「w」與「a」三種:

open()讀寫模式

  • r:以唯讀模式開啟檔案,不能寫入任何資料。
  • w:以寫入模式開啟檔案,檔案中所有的資料都會被清空。
  • a:以附加模式開啟檔案,也是寫入的一種,但是並不會刪除原有的內容,新增加的資料會附加到原始資料的後面。

在大部分的應用上,都是以文字檔的方式來儲存內容。如果我們想要寫入檔案,可以把檔案模式改為「w」。下面的程式碼會把「Hello」寫入檔案中。

f = open('filename','w')f.write("Hello")f.close()

此外,前面所述的三種模式中,以「r」為open()的預設值。而且除以上三種常用模式之外,還有「x」、「b」、「t」等模式可以選擇。下表列出所有可以選用的模式。

讀取檔案

由於open()函式只負責開啟檔案,本身並不會從檔案中讀取任何的內容。因此,要讀取檔案中的內容必須再加上其他的指令。Python 讀取檔案的方法有幾種,可以使用file物件的方法來讀取,分別是「read」「readline」「readlines」等。

read()可以一口氣把所有的內容讀取,並且以字串的型態放入變數中。

line = f.read()

readline()則是一次可以讀取一行字串。換句話說,每呼叫一次readline(),就會從檔案中讀取一行字串。

line = f.readline()

至於readlines()則把每一行拆開分別放在不同的list變數中,並以list的方式彙整在一起。

f = open('filename','r')line = f.readlines()f.close()

編碼方式

讀取檔案時,對於使用非英語系的朋友來說,編碼問題應該是會常常遇到的。open函式提供encoding參數可以用來指定檔案的編碼方式。對於中文語系來說,常用的編碼方式是「utf-8」、「utf-8-sig」與「cp950」。其中,「utf-8-sig」會在檔案前面加入BOM,在繁體中文的Windows系統下,會預設使用「cp950」來開啟檔案。寫法如下:

f = open('filename','r', encoding='utf-8')

file物件的方法

常用的方法如下:

  • read(n):讀取n個字元,若省略n,就會讀取全部的內容。
  • readline():由讀寫頭目前位置讀取一行文字,並且將讀寫頭移到下行。如前面的例子
  • readlines():讀取所有的行並且依序加入到串列中傳回。
  • write(str):將括弧中的str字串寫入檔案。如前面的例子。
  • close():關閉檔案。

關閉檔案

關閉檔案可以釋放系統資源,避免資源的佔用導致其他程式無法順利運作。因此,檔案一旦被開啟,就需要用close()來關閉檔案。

f = open('filename','r')line = f.readline()f.close()

如果你擔心每次開啟檔案後,會忘記關閉檔案,可以使用with來寫上面的程式。with是Python裡面的context manager。可以管理檔案的使用與不使用,檔案用完自動關閉,以確保檔案得到妥善的處理。使用with這個方式敘述可以讓程式碼看起來更加的簡潔。

with open('filename','r') as f:line = f.readline()

採用with改寫成上面的程式碼,就不需要加上close()了。

以上就是檔案的開啟、讀取與寫入最基本的部分。

--

--

Sean Yeh
Python Everywhere -from Beginner to Advanced

# Taipei, Internet Digital Advertising,透過寫作讓我們回想過去、理解現在並思考未來。並樂於分享,這才是最大贏家。