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()了。

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

--

--

Python Everywhere -from Beginner to Advanced
Python Everywhere -from Beginner to Advanced

Published in Python Everywhere -from Beginner to Advanced

This place is All about Python. From Beginner to Advanced programing, by using Python, you can do anything you imagine.

Sean Yeh
Sean Yeh

Written by Sean Yeh

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

No responses yet