利用Python資料檔保存資料結構變數內容

在前一篇文章中我們學會了如何利用文字檔的方式,以每一個資料一列的方式保存串列中的每一個數值元素,此種方式對於字串資料也一併適用。然後,有時候我們的資料變數的型態輸為複雜時,其實是不需要把它們進行剖析,逐個保存的,我們可以一次就把所有的資料全部以資料檔的型式存成檔案。

例如,以上一篇文章的例子,當我們建立了一個數值串列之後,不需要迴圈,只要把它直接轉換成字串,再利用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'])

如你所看到的,轉換後的字典變數可以直接使用。之後如果需要保存比較複雜的資料型態變數,歡迎多加使用此種方式。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *