1. 程式人生 > >萌新向Python數據分析及數據挖掘 第一章 Python基礎 第十節 文件和異常

萌新向Python數據分析及數據挖掘 第一章 Python基礎 第十節 文件和異常

找不到文件 with net 刪掉 關鍵字 tro 可用 錯誤 remember

第一章 Python基礎

第十節 文件和異常

從文件中讀取數據

讀取文件、文件路徑

技術分享圖片



 
技術分享圖片

技術分享圖片
1 filename = pi_digits.txt #文件名取個代號
2 #讀取整個文件    
3 with open(filename) as file_object:
4     contents = file_object.read()# 給內容取個代號
5     print(contents.rstrip())
6 #逐行讀取
7 with open(filename) as file_object:
8     for line in file_object:#給一行內容取個代號
9 print(line.rstrip())
View Code



函數open():接受要打開文件的文件名作為參數。如果沒有指定路徑,則在當前執行的文件所在的目錄中查找指定的文件。此函數返回一個表示文件的對象。

關鍵字with:表示在不需要訪問文件之後將其關閉。

函數read():用於從文件讀取指定的字節數,如果未給定或為負則讀取所有。到達文件末尾時返回一個空字符串(空行)。打印時可使用函數rstrip()刪掉。

相對文件路徑:相對於當前運行的程序所在目錄。

絕對文件路徑:完整的文件路徑。

創建包含文件各行內容的列表並使用

使用關鍵字with時,open()返回的文件對象只在with

代碼塊內使用。如果要在with代碼塊外訪問文件內容,可在裏邊將文件各行存儲在一個列表中待後續使用。

技術分享圖片

技術分享圖片
 1 filename = pi_digits.txt
 2 with open(filename) as file_object:
 3     lines = file_object.readlines()#讀完文件
 4 
 5 pi_string = ‘‘ #
 6 for line in lines:
 7     pi_string += line.strip()#把每個line的內容去掉空格加入Pi——string
 8 
 9 print(pi_string #
打印 10 print(len(pi_string))#量一下你有多長
View Code



註意:讀取文本文件時,python將其中所有文本都解讀穩字符串。

寫入文件

將文本寫入文件時,調用open()時需要提供另外一個實參。其中,第一個實參時要打開的文件的名稱。第二個實參是指定的模式:讀取模式(‘r‘)、寫入模式(‘w‘)、附加模式(‘a‘)、讀取和寫入模式(‘r+‘。如果省略將以默認的只讀模式打開文件。

如果寫入的文件不存在,則open()會自動創建它。如果以寫入模式打開文件且指定文件對象存在,則返回文件對象前會清空改文件。

技術分享圖片


運行結果:
技術分享圖片

技術分享圖片
1 filename = programming.txt
2 with open(filename, w) as file_object:
3     file_object.write("I love programming.")
4     file_object.write("I love programming.\n")#註意換行符\n
5     file_object.write("I love creating new games.\n")
View Code



註意:python只能將字符串寫入文本文件。函數write()不會在寫入的文本末尾添加換行符。

附加到文件

技術分享圖片

 
運行結果:
技術分享圖片

技術分享圖片
1 filename = programming.txt
2 with open(filename, a) as file_object:#‘a’ 代表附加模式,在末尾添加內容
3     file_object.write("I also love finding meaning in large datasets.\n")
4     file_object.write("I love creating apps that can run in a browser.\n")
View Code



異常

異常時python用來管理程序執行期間發生錯誤的特殊對象。

異常是使用try-except代碼塊處理的。如果try代碼塊中的代碼運行無誤,則跳過except代碼塊;如果try代碼塊中的代碼運行出現錯誤,則運行except代碼塊

技術分享圖片



ZeroDivisionError是一個異常對象。

技術分享圖片

技術分享圖片
1 try:#試試
2     print(5/0) #打印5除以0
3 except ZeroDivisionError: #要是爆發“除以0錯誤”
4     print("You can‘t divide by zero!")#打印你不能除以0
View Code



使用try-except代碼塊也可以隱藏Traceback,防止惡意攻擊等等。

除了try-except代碼塊還有try-except-else代碼塊。其中try代碼塊只包含可能導致錯誤的代碼,而依賴於其成功執行的代碼都放在else代碼塊中。

如果希望發生錯誤時繼續運行,可以在except代碼塊中使用pass語句pass語句還充當了占位符,用來提醒我們在程序的某個地方什麽都沒有做。

常見的異常類型如下:

AttributeError:屬性錯誤,特性引用和賦值失敗時會引發屬性錯誤

NameError:試圖訪問的變量名不存在

SyntaxError:語法錯誤,代碼形式錯誤

Exception:所有異常的基類,因為所有python異常類都是基類Exception的其中一員,異常都是從基類Exception繼承的,並且都在exceptions python 模塊中定義。

IOError:python ioerror,一般常見於打開不存在文件時會引發IOError錯誤,也可以解理為輸出輸入錯誤

KeyError:使用了映射中不存在的關鍵字(鍵)時引發的關鍵字錯誤

IndexError:索引錯誤,使用的索引不存在,常索引超出序列範圍

TypeError:類型錯誤,內建操作或是函數應於在了錯誤類型的對象時會引發類型錯誤

ZeroDivisonError:除數為0,在用除法操作時,第二個參數為0時引發了該錯誤

ValueError:值錯誤,傳給對象的參數類型不正確,像是給int()函數傳入了字符串數據類型的參數。

更多內容可以看看怪伽先森小哥哥的文:

https://blog.csdn.net/u011033906/article/details/79653345

存儲數據

模塊json可以讓我們將簡單的python數據結構轉儲到文件中,並在程序再次運行時加載該文件中的數據。並且還可以使用json在python程序中分享數據。

函數json.dump()接受兩個實參:要存儲的數據以及可用於存儲數據的文件對象。

技術分享圖片

技術分享圖片
 1 import json #讓json來幫忙
 2 numbers = [2, 3, 5, 7, 11, 13]
 3 filename = numbers.json
 4 
 5 with open(filename, w) as f_obj:
 6 #函數json.dump()接受兩個實參:要存儲的數據以及可用於存儲數據的文件對象。
 7     json.dump(numbers, f_obj)
 8 
 9 #讀取整個文件    
10 with open(filename) as file_object:
11     contents = file_object.read()# 給內容取個代號
12     print(contents.rstrip())
13     
14 with open(filename) as f_obj:#也可以用json.load來打開,畢竟是json自己寫的東西,他當然有辦法打開
15     numbers = json.load(f_obj)
16 print(numbers)
View Code



下面將存取數據和異常結合一下程序運行時,從文件獲取用戶名,若文件不存在,則提示輸入用戶名並存儲:

技術分享圖片


技術分享圖片
 1 import json
 2 # 如果以前存儲了用戶名就加載它
 3 # 否則提示用戶輸入用戶名並存儲它
 4 filename = username.json
 5 ask = ‘‘
 6 while ask != "no":
 7     try:#試試打開username
 8         with open(filename) as f_obj:
 9             username = json.load(f_obj)
10     except FileNotFoundError: #如果發生“找不到文件”錯誤
11         username = input("What is your name? ")#讓用戶自己輸入自己的名字
12         with open(filename, w) as f_obj:#打開一個以用戶的名字的文件,要是沒有就創建一個
13             json.dump(username, f_obj)#用json家的dump寫文件
14             print("We‘ll remember you when you come back, " + username + "!")
15             #打印告訴用戶我會記住你的
16             ask = input("Next one?yes/no ")
17     else:
18         print("Welcome back, " + username + "!")#要不就打印歡迎回來,某某某!
19         ask = input("Next one?yes/no ")        
View Code

萌新向Python數據分析及數據挖掘 第一章 Python基礎 第十節 文件和異常