在前一篇文章中我們學會了如何利用文字檔的方式,以每一個資料一列的方式保存串列中的每一個數值元素,此種方式對於字串資料也一併適用。然後,有時候我們的資料變數的型態輸為複雜時,其實是不需要把它們進行剖析,逐個保存的,我們可以一次就把所有的資料全部以資料檔的型式存成檔案。
例如,以上一篇文章的例子,當我們建立了一個數值串列之後,不需要迴圈,只要把它直接轉換成字串,再利用write()函式儲存即可。請參考以下的程式:
scores = list()
score = int(input("Score="))
while score >=0:
scores.append(score)
score = int(input("Score="))
filename = input("請輸入要保存的檔案名稱:")
fp = open(filename, "w")
fp.write(str(scores))
fp.close()
此程式執行的過程如下:
如上圖所示,我們把那些數字(放在scores數值串列中)儲存在data03.txt中,則打開data03.txt之後,可以看到以下的內容:
[10, 40, 89, 45, 45, 98]
上述的表現格式,就是串列型態原來的樣子,但是它被以字串的型態保存起來了。同樣的方法,如果我們有字典型態的資料需要保存的話,也是直接存檔,請參考以下的程式例:
data = dict()
data['Apple'] = '蘋果'
data['Cherry'] = '櫻桃'
data['Banana'] = '香蕉'
data['Lemon'] = '檸檬'
filename = input("請輸入要保存的檔案名稱:")
fp = open(filename, "w")
fp.write(str(data))
fp.close()
上述的程式執行之後,假設我們把資料保存在data04.txt中,則打開data04.txt可以看到如下所示的內容,很明顯就是字典型態該有的樣子:
{'Apple': '蘋果', 'Cherry': '櫻桃', 'Banana': '香蕉', 'Lemon': '檸檬'}
其它的格式依此類推,就不再重複展示。但是,保存起來之後,最重要的是之後能夠加以讀取應用。由於它是以標準的資料型態表示方式來儲存,所以並不能使用readlines() 讀取,而是要利用read()一口氣把它以一個字串的方式讀入變數中,之後再進行轉換。轉換的模組是ast,方法如下:
import ast
filename = input("請輸入要讀取的檔案名稱:")
fp = open(filename, "r", encoding="utf-8")
data = fp.read()
fp.close()
data = ast.literal_eval(data)
print(data['Banana'])
print(data['Cherry'])
如你所看到的,轉換後的字典變數可以直接使用。之後如果需要保存比較複雜的資料型態變數,歡迎多加使用此種方式。