如果你想更持久地存儲程序的信息,可以看著屏幕,把這些信息抄寫在紙上。不過這樣根本無法體現出計算機的作用!
比較好的做法是把信息保存在硬盤上,這樣一來,即使程序不再運行(即計算機已經關機),你的數據仍然能保留下來,供以後使用。其實你早已經這麼做了。每次保存學校作業、圖片、歌曲或者 Python 程序時,實際上都是將它們存儲到硬盤上。
從前的美好時光
在我們那個年代,只有紙!沒有顯示器、打印機,甚至沒有鍵盤。要通過在卡片上打孔來「寫」代碼。然後把這疊卡片塞進一個大機器裡,它會把這些打孔卡轉換成計算機能夠理解的電子信號。有時需要花幾天時間才能得到一個答案。唉,可真是又費勁又麻煩!
老式計算機打孔卡
前面已經提到,在文件中添加內容有兩種方法。
寫——這表示開始新文件,或者覆蓋現有的文件。
追加——這表示增加到現有的文件,保留原來已有的內容。
要寫文件或追加文件,首先必須打開文件。像前面一樣要使用 open
函數,只不過第二個參數有所不同。
要讀文件,需要使用
\'r\'
作為文件模式:my_file = open(\'new_notes.txt\', \'r\')
要寫文件,需要使用
\'w\'
作為文件模式:my_file = open(\'new_notes.txt\', \'w\')
要追加文件,需要使用
\'a\'
作為文件模式:my_file = open(\'notes.txt\', \'a\')
如果使用 \'a\'
表示追加模式,文件名必須是硬盤上某個已經存在的文件的名字,否則你會得到一條錯誤消息。這是因為,追加是指增加到一個現有的文件。
卡特又說對了!如果使用 \'w\'
表示寫模式,會有兩種可能:
如果文件已經存在,文件中的所有內容都會丟失,替換為現在寫入的內容;
如果文件不存在,會創建一個同名的新文件,你寫的所有內容會被放入這個新文件中。
下面來看一些例子。
追加到文件
首先,還是使用前面創建的 notes.txt 文件,為它追加一些內容。下面增加一行「Spend allowance」。完成 readlines
例子時如果你仔細觀察,可能已經注意到最後一行末尾沒有 n
,也就是說沒有換行符。所以現在需要增加一個換行符,然後再增加我們的新字符串。要把字符串寫入文件,需要使用 write
方法,如代碼清單 22-3 所示。
代碼清單 22-3 使用追加模式
讀文件時,我們說過一旦完成就應當關閉文件。這一點在寫文件時更為重要,寫文件完成時一定要使用 close
。這是因為,只有使用 close
關閉文件,你所做的修改才會真正保存到文件中。
運行代碼清單 22-3 中的程序之後,用「記事本」(或者任何其他文本編輯器)打開 notes.txt,看看裡面的內容。記住,看完後一定要關閉「記事本」。
寫文件
現在來看一個使用寫模式來寫文件的例子。我們將打開一個目前硬盤上還沒有的文件。鍵入代碼清單 22-4 中的程序,然後運行。
代碼清單 22-4 對一個新文件使用寫模式
new_file = open(\"my_new_notes.txt\", \'w\')new_file.write(\"Eat suppern\")new_file.write(\"Play soccern\")new_file.write(\"Go to bed\")new_file.close
怎麼知道這個程序是否起作用呢?檢查保存這個程序(代碼清單 22-4)的文件夾,應該能看到一個名為 my_new_notes.txt 的文件。可以在「記事本」中打開這個文件,看看裡面有什麼。應該能看到:
Eat supperPlay soccerGo to bed
你利用這個程序創建了一個文本文件,並在這個文件中存儲了一些文本。這個文件存放在硬盤上,只要硬盤沒有壞,它就會一直在那裡,除非你刪除了它。這樣一來我們就得到了一種方法,可以持久地存儲程序的數據。現在你的程序就能在這個世界上(或者至少在你的硬盤上)留下永久的印記了。如果要在程序停止和計算機關機時保留一些信息,都可以放在文件中。
下面來看如果對硬盤上已有的一個文件使用寫模式會發生什麼。還記得那個 notes.txt 文件嗎?如果運行過代碼清單 22-3 中的程序,這個文件現在是這樣的:
Wash the carMake my bedCollect allowanceSpend allowance
下面用寫模式打開這個文件,並寫入內容,看看會發生什麼。代碼清單 22-5 給出了相應的代碼。
代碼清單 22-5 對一個現有文件使用寫模式
the_file = open(\'notes.txt\', \'w\')the_file.write(\"Wake upn\")the_file.write(\"Watch cartoons\")the_file.close
運行這個代碼,然後在「記事本」中打開 notes.txt,看看其中包含什麼內容。應該會看到:
Wake upWatch cartoons
notes.txt 原先的內容都不見了,已經被代碼清單 22-5 程序中的新內容所取代。
使用 print
寫文件
上一節中,我們使用了 write
來寫文件,還可以用 print
寫文件。仍然要以寫模式或追加模式打開文件,不過打開文件後可以使用 print
寫文件,就像這樣:
my_file = open(\"new_file.txt\", \'w\')print >> my_file, \"Hello there, neighbor!\"my_file.close
這裡的兩個 > 符號(有時稱為山形符號)告訴 print
要把它的輸出發送到一個文件中而不是屏幕上。這稱為重定向(redirecting)輸出。
有時使用 print
比 write
更方便,因為 print
還會額外完成一些工作,比如把數字自動轉換為字符串等。如果要在文件中放入文本,你可以使用 print
,也可以使用 write
。