[TOC]
*****
讀取一個文本文件的內容,重新設置這些數據的格式并將其寫入文件,讓瀏覽器能夠顯示這些內容。要使用文本文件中的信息,首先需要將信息讀取到內存中。為此,你可以一次性讀取文件的全部內容,也可以以每次一行的方式逐步讀取。
## 10.1.1 讀取整個文件
先準備被讀取文件,放在和執行文件同一目錄下

執行讀取的程序文件
```
filename = 'pi_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()
for line in lines:
print(line.rstrip())
```
函數open()接受一個參數:要打開的文件的名稱。 Python在當前執行的文件所在的目錄中查找指定的文件。 函數open()返回一個表示文件的對象。
關鍵字with在不再需要訪問文件后自動將其關閉
使用方法read()(前述程序的第2行)讀取這個文件的全部內容,并將其作為一個長長的字符串存儲在變量contents中。
通過打印contents的值,就可將這個文本文件的全部內容顯示出來:

read()到達文件末尾時返回一個空字符串,而將這個空字符串顯示出來時就是一個空行。要刪除末尾的空行,可在print語句中使用rstrip()
方法rstrip()刪除(剝除)字符串末尾的空白。現在,輸出與原始文件的內容完全相同

## 10.1.2 文件路徑
當你將類似pi_digits.txt這樣的簡單文件名傳遞給函數open()時, Python將在當前執行的文件(即.py程序文件)所在的目錄中查找文件。
相對文件路徑讓Python到指定的位置去查找,而該位置是相對于當前運行的程序所在目錄的。
Windows系統中,在文件路徑中使用反斜杠(\)而不是斜杠(/)
```
with open('text\_files\\filename.txt') as file_object:
```
將文件在計算機中的準確位置告訴Python,這樣就不用關心當前運行的程序存儲在
什么地方了。這稱為絕對文件路徑
```
**在winows中**
file_path = 'C:\Users\ehmatthes\other_files\text_files\filename.txt'
with open(file_path) as file_object:
```
## 10.1.3 逐行讀取
讀取文件時,常常需要檢查其中的每一行。以每次一行的方式檢查文件,可對文件對象使用for循環:
```
filename = 'pi_digits.txt'
#給返回的文件對象命名為file_object
with open(filename) as file_object:
# 執行循環來遍歷文件中的每一行
for line in file_object:
print(line)
```
我們打印每一行時,發現空白行更多了


## 10.1.4 創建一個包含文件各行內容的列表
使用關鍵字with時, open()返回的文件對象只在with代碼塊內可用。如果要在with代碼塊外訪問文件的內容,可在with代碼塊內將文件的各行存儲在一個列表中,并在with代碼塊外使用該列表。
```
filename = 'pi_digits.txt'
with open(filename) as file_object:
#將文件中的每一行存在列表中,該列表被存儲到變量lines中
lines = file_object.readlines()
#在with外,循環讀取列表中的每一行
for line in lines:
print(line.rstrip())
```
列表lines的每個元素都對應于文件中的一行

## 10.1.6 包含一百萬位的大型文件
前面我們分析的都是一個只有三行的文本文件,但這些代碼示例也可處理大得多的文件。如果我們有一個文本文件,其中包含精確到小數點后1 000 000位而不是30位的圓周率值,也可創建一個包含所有這些數字的字符串。為此,我們無需對前面的程序做任何修改,只需將這個文件傳遞給它即可。