# 第12章 輸入/輸出
**目錄表**
+ 文件
+ 使用文件
+ 儲存器
+ 儲存與取儲存
+ 概括
在很多時候,你會想要讓你的程序與用戶(可能是你自己)交互。你會從用戶那里得到輸入,然后打印一些結果。我們可以分別使用`raw_input`和`print`語句來完成這些功能。對于輸出,你也可以使用多種多樣的`str`(字符串)類。例如,你能夠使用`rjust`方法來得到一個按一定寬度右對齊的字符串。利用`help(str)`獲得更多詳情。
另一個常用的輸入/輸出類型是處理文件。創建、讀和寫文件的能力是許多程序所必需的,我們將會在這章探索如何實現這些功能。
你可以通過創建一個`file`類的對象來打開一個文件,分別使用`file`類的`read`、`readline`或`write`方法來恰當地讀寫文件。對文件的讀寫能力依賴于你在打開文件時指定的模式。最后,當你完成對文件的操作的時候,你調用`close`方法來告訴Python我們完成了對文件的使用。
```
#!/usr/bin/python
# Filename: using_file.py
poem = '''\
Programming is fun
When the work is done
if you wanna make your work also fun:
????????use Python!
'''
f = file('poem.txt', 'w') # open for 'w'riting
f.write(poem) # write text to file
f.close() # close the file
f = file('poem.txt')
# if no mode is specified, 'r'ead mode is assumed by default
while True:
????line = f.readline()
????if len(line) == 0: # Zero length indicates EOF
????????break
????print line,
????# Notice comma to avoid automatic newline added by Python
f.close() # close the file
```
(源文件:[code/using_file.py](code/using_file.py))
## 輸出
```
$ python using_file.py
Programming is fun
When the work is done
if you wanna make your work also fun:
????????use Python!
```
## 它如何工作
首先,我們通過指明我們希望打開的文件和模式來創建一個`file`類的實例。模式可以為讀模式(`'r'`)、寫模式(`'w'`)或追加模式(`'a'`)。事實上還有多得多的模式可以使用,你可以使用`help(file)`來了解它們的詳情。
我們首先用寫模式打開文件,然后使用`file`類的`write`方法來寫文件,最后我們用`close`關閉這個文件。
接下來,我們再一次打開同一個文件來讀文件。如果我們沒有指定模式,讀模式會作為默認的模式。在一個循環中,我們使用`readline`方法讀文件的每一行。這個方法返回包括行末換行符的一個完整行。所以,當一個 空的 字符串被返回的時候,即表示文件末已經到達了,于是我們停止循環。
注意,因為從文件讀到的內容已經以換行符結尾,所以我們在`print`語句上使用逗號來消除自動換行。最后,我們用`close`關閉這個文件。
現在,來看一下`poem.txt`文件的內容來驗證程序確實工作正常了。
- 版權信息
- 前言
- 本書的由來
- 本書目前的狀況
- 約定條款
- 反饋
- 值得思考的一些東西
- 第1章 介紹
- Python的特色
- 為什么不使用Perl?
- 程序員的話
- 第2章 安裝Python
- Windows?用戶
- 概括
- 第3章 最初的步驟
- 使用帶提示符的解釋器
- 挑選一個編輯器
- 使用源文件
- 可執行的Python程序
- 獲取幫助
- 概括
- 第4章 基本概念
- 數
- 字符串
- 變量
- 標識符的命名
- 數據類型
- 對象
- 邏輯行與物理行
- 縮進
- 概括
- 第5章 運算符與表達式
- 運算符
- 運算符優先級
- 表達式
- 概括
- 第6章 控制流
- if語句
- while語句
- for循環
- break語句
- continue語句
- 概括
- 第7章 函數
- 函數形參
- 局部變量
- 默認參數值
- 關鍵參數
- return語句
- DocStrings
- 概括
- 第8章 模塊
- 字節編譯的.pyc文件
- from..import語句
- 模塊的name
- 制造你自己的模塊
- dir()函數
- 概括
- 第9章 數據結構
- 列表
- 元組
- 字典
- 序列
- 參考
- 更多字符串的內容
- 概括
- 第10章 解決問題——編寫一個Python腳本
- 解決方案
- 軟件開發過程
- 概括
- 第11章 面向對象的編程
- self
- 類
- 對象的方法
- __init__方法
- 類與對象的方法
- 繼承
- 概括
- 第12章 輸入/輸出
- 儲存器
- 概括
- 第13章 異常
- try..except
- 引發異常
- try..finally
- 概括
- 第14章 Python標準庫
- sys模塊
- os模塊
- 概括
- 第15章 更多Python的內容
- 單語句塊
- 列表綜合
- 在函數中接收元組和列表
- lambda形式
- exec和eval語句
- assert語句
- repr函數
- 概括
- 第16章 接下來學習什么?
- 探索更多內容
- 概括
- 附錄A 自由/開放源碼軟件(FLOSS)
- 附錄B 關于本書
- 關于作者
- 關于譯者
- 關于簡體中文譯本
- 附錄C 修訂記錄
- 術語表