10.1.1 讀取整個文件
首先創建一個文件如:pi_digits.txt

下面的程序可以讀取該文件,再將其內容顯示到屏幕上:
1 with open("pi_digits.txt") as file_object: 2 contents=file_object.read() 3 print(contents)
運行結果:
>>> ================== RESTART: F:/python學習/10/10.1/file_reader.py ================= 3.1415926535 8979323846 2643383279 >>>
說明:
1.使用方法read()讀取文件(該文件如果與程序文件在同一目錄下,直接使用文件名,否則需加絕對路徑)。
2.關鍵字 with 在不再需要訪問文件后將其關閉(你只管打開文件,并在需要時使用它,python自會在合適的時候自動將其關閉。)
3.使用關鍵字with與使用close()方法比較,避免了因為程序bug而導致close()語句未能執行文件不能關閉,導致文件丟失或受損,或程序中過早的調用close()語句,當需要調用文件時它已經關閉的情況。
10.1.2 文件路徑
可以將需要讀取的文件的準確位置(即絕對路徑)告訴python,這樣就不用關心當前 運行程序存儲在什么地方了。
絕對路徑通常比相對 路徑更長,因此可以將其存儲在一個變量中,再將該變量傳遞給open()會有所幫助。
file_path="f:/python學習/10/10.1/py_digist.txt" with open(file_path) as file_object:
通過使用絕對路徑,可讀取系統任何地方的文件。
10.1.3 逐行讀取
要以每次一行的方式檢查文件,可對文件對象使用for 循環:
filename="pi_digits.txt" with open(filename) as file_object: for line in file_object: print(line)
運行結果:
>>> ================ RESTART: F:/python學習/10/10.1/file_readlines.py ================ 3.1415926535 8979323846 2643383279 >>>
說明:
1.第一行,把需要打開的文件名存儲在一個變量中
2.使用with關鍵字讓python負責妥善的打開和關閉文件。
問題:每打印一行時,發現多出一個空行。
原因:因為在這個文件中,每一行末尾都有一個看不見的換行符,而print()語句也會加上一個換行符,因此每行末尾都有兩個換行符:一個來自文件,另一個來自print語句
解決方法:可以在print語句中使用rstrip()
優化后的代碼如下:
filename="pi_digits.txt" with open(filename) as file_object: for line in file_object: print(line.rstrip())
運行結果如下:
>>> ================ RESTART: F:/python學習/10/10.1/file_readlines.py ================ 3.1415926535 8979323846 2643383279 >>>
10.1.4 創建一個包含文件各行內容的列表
下面的示例在with代碼塊中將文件pi_digits.txt的各行存儲在一外列表 中,再在with代碼塊外打印它們:
1 filename="pi_digits.txt" 2 with open(filename) as file_object: 3 lines=file_object.readlines() 4 for line in lines: 5 print(line.rstrip())
說明:readelines()方法實現從文件中讀取每一行,并將其存儲在一個列表中。
10.1.5使用文件的內容
將文件讀取到內存中后,就可以以任何方式使用這些數據了。
下面以簡單的方式使用圓周率的值。
filename="pi_digits.txt" with open(filename) as file_object: lines=file_object.readlines() pi_string="" #創建一個字符串變量,用于存儲圓周率的值 for line in lines: pi_string+=line.rstrip()#將各行都加入pi_string,使用rstrip()方法刪除每行末尾的換行符 print(pi_string) print(len(pi_string))
運行結果:
>>> =================== RESTART: F:/python學習/10/10.1/pi_string.py ================== 3.1415926535 8979323846 2643383279 36 >>>
發現問題:在變量pi_string存儲的字符串中,包含原來位于每行左邊的空格,為刪除這些空格,可使用strip()而不是rstrip()。
優化后代碼如下:
filename="pi_digits.txt" with open(filename) as file_object: lines=file_object.readlines() pi_string="" #創建一個字符串變量,用于存儲圓周率的值 for line in lines: pi_string+=line.strip()#將各行都加入pi_string,使用strip()方法刪除所有的空格 print(pi_string) print(len(pi_string))
運行結果如下:
>>> =================== RESTART: F:/python學習/10/10.1/pi_string.py ================== 3.141592653589793238462643383279 32 >>>
10.1.6 包含一百萬位的大型文件
對于可處理的數據量,python沒有任何限制,只要系統的內存足夠多,想處理多少數據都可以。
例:打印圓周率小數點后50位,打開的文件中包含精確到小數點合100位的圓周率。

代碼如下:
filename="pi_ hundred_digits.txt" with open(filename) as file_object: lines=file_object.readlines() pi_string="" #創建一個字符串變量,用于存儲圓周率的值 for line in lines: pi_string+=line.strip()#將各行都加入pi_string,使用strip()方法刪除所有的空格 print(pi_string[:52]+"...")#只打印出小數點后50位 print(len(pi_string))
運行結果:
>>>
============== RESTART: F:/python學習/10/10.1/pi_ hundred_string.py ==============
3.14159265358979323846264338327950288419716939937510...
102
>>>
10.1.7圓周率值中包含你的生日嗎
如果你想知道自己的生日是否包含在圓周率中,可將生日表示為一個由數字組成的字符串,再檢查這個字符串是否包含在pi_string中:
代碼如下:
filename="pi_ hundred_digits.txt" with open(filename) as file_object: lines=file_object.readlines() pi_string="" #創建一個字符串變量,用于存儲圓周率的值 for line in lines: pi_string+=line.strip()#將各行都加入pi_string,使用strip()方法刪除所有的空格 birthday=input("請輸入你的生日:")#提示輸入生日,以字符串形式。 if birthday in pi_string: #檢查這個字符串是否包含在pi_string中 print("你的生日在圓周率的前100位之中!") else: print("你的生日沒有在圓周率的前100位之中!")
運行兩次結果:
>>> ============= RESTART: F:/python學習/10/10.1/birthday_in_pi_string.py ============ 請輸入你的生日:20010203 你的生日沒有在圓周率的前100位之中! >>> ============= RESTART: F:/python學習/10/10.1/birthday_in_pi_string.py ============ 請輸入你的生日:79323 你的生日在圓周率的前100位之中! >>>
浙公網安備 33010602011771號