感受比Java簡單許多啊...函數
將基於內存的數據存儲到磁盤上測試
對於文件的處理,通常是打開文件,獲取文件內容,進行處理。處理結果能夠在屏幕上顯示,也能夠保存在其餘文件中。好比上一章對話的例子,將不一樣人說的話顯示,或者保存在文件中。ui
Python中的字符串是不可變的(數值類型也不可變),strip()
方法會建立一個新的字符串,將結果返回給line_spoken
。this
Python變量只包含數據對象的一個引用,數據對象才真正包含數據(聯想:變量無類型)rest
使用open()
BIF打開磁盤文件時,能夠指定使用什麼訪問模式,默認r模式(讀)。code
寫模式即w模式。orm
默認地,print()
BIF顯示數據時會使用標準輸出(一般是屏幕)。要把數據寫至一個文件,須要使用file
參數來指定所使用的數據文件對象(默認file=sys.stdout
):對象
寫入完成後,必定要關閉文件,確保全部數據都寫至磁盤。這稱爲刷新輸出(flushing),這一點很是重要。圖片
out.close() # 後面會講到使用with關鍵字幫助處理這個過程
在文件處理過程當中,若是出現錯誤,則打開的文件將不會關閉,可使用finally
進行關閉。ip
When an error occurs at runtime, Python raises an exception of the specific type (such as IOError, ValueError , and so on). Additionally, Python creates an exception object that is passed as an argument to your except suite.
with
處理文件下圖兩種方法實現同樣的功能
close()
方法會有異常,locals()
BIF會返回當前做用域中的變量集合,使用if 'data' in locals() :
進行測試。as
關鍵字能夠將異常對象賦值至一個標識符,但不能直接打印,應該使用str()
BIF把異常對象轉換爲字符串。因爲處理文件時try/except/finally
模式至關經常使用,因此Python提供了一個語句來抽象出相關的一些細節。The with statement, when used with files, can dramatically reduce the amount of code you have to write, because it negates the need to include a finally suite to handle the closing of a potentially opened data file.
with語句會自動處理全部已打開文件的關閉工做,即便出現異常也不例外。with語句也使用as關鍵字。
The with statement takes advantage of a Python technology called the context management protocol(上下文管理協議).
print()
BIF:
Python ships with a standard library called pickle, which can save and load almost any Python data object, including lists.至關因而Java對象的序列化。以下圖:
You can, for example, store your pickled data on disk, put it in a database, or transfer it over a network to another computer.
When you are ready, reversing this process unpickles your persistent pickled data and recreates your data in its original form within Python's memory:
標準庫存的pickle模塊容許你容易而高效地將Python數據對象保存到磁盤以及從磁盤恢復。
dump
保存,用load
恢復Using pickle is straightforward: import the required module, then use dump()
to save your data and, some time later, load()
to restore it. The only requirement when working with pickled files is that they have to be opened in binary access mode:
dump()
和load()
方法都會拋出pickle.PickleError,所以須要進行捕獲。
這樣保存list的方式,能夠不使用print(list, fiie='man.txt')
的方式,而使用pickle.dump(list, 'man.txt')
的方式。
本章還改進了nester.py,爲print_lol()
函數加入了fh=sys.stdout
可選參數。可與load()
結合使用打印列表。