日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
一文搞懂文件操作與異常模塊

本文轉載自微信公眾號「數據STUDIO」,作者云朵君  。轉載本文請聯系數據STUDIO公眾號。

創(chuàng)新互聯于2013年成立,是專業(yè)互聯網技術服務公司,擁有項目成都網站設計、網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元榮縣做網站,已為上家服務,為榮縣各地企業(yè)和個人服務,聯系電話:13518219792

大家好!我是云朵君,今天給大家?guī)硪黄狿ython文件操作與異常處理,這兩個部分往往是初學者入門時容易忽略的部分。大家重點的精力都放在如何寫出高大上的算法,如何畫出酷炫的圖形,如何使用機器學習模型等等,而常常容易忽略Python文件操作與異常處理,這兩個看似不起眼卻在python中卻擔著至關重要的角色。下面我們就來一起看看吧。

文件操作

我們的程序可以讀取文件,也可以寫入文件。默認情況下,文件以讀模式('r')打開,但也可以以寫模式('w')和附加模式('a')打開。

你的程序可以從文件中讀取信息,也可以向文件中寫入數據。從文件中讀取可以讓你處理各種各樣的信息;寫入文件允許用戶在下次運行你的程序時重新開始。您可以將文本寫入文件,還可以將Python結構(如列表)存儲在數據文件中。

讀取文件

要從文件中讀取,程序需要打開文件,然后讀取文件的內容。您可以一次讀取文件的全部內容,也可以逐行讀取文件。with語句確保當程序完成對文件的訪問后,文件被正確地關閉。

  • 一次讀取整個文件
 
 
 
  1. filename = 'siddhartha.txt' 
  2. with open(filename) as f_obj: 
  3.     contents = f_obj.read() 
  4. print(contents) 
  • 逐行讀取

從文件中讀取的每一行在行尾都有一個換行符,而print函數會添加它自己的換行符。rstrip()方法消除了打印到終端時會產生的額外空白行。

 
 
 
  1. filename = 'siddhartha.txt' 
  2. with open(filename) as f_obj: 
  3.     for line in f_obj: 
  4. print(line.rstrip()) 
  • 將行存儲在列表中
 
 
 
  1. filename = 'siddhartha.txt' 
  2. with open(filename) as f_obj: 
  3.     lines = f_obj.readlines() 
  4. for line in lines: 
  5.     print(line.rstrip()) 
  • 寫入文件

將'w'參數傳遞給open()告訴Python你想寫入文件。小心:如果文件已經存在,這將刪除文件的內容。

傳遞'a'參數告訴Python你想要添加到一個現有文件的末尾。

  • 寫入一個空文件
 
 
 
  1. filename = 'programming.txt' 
  2. with open(filename, 'w') as f: 
  3.     f.write("I love programming!") 
  • 向空文件寫入多行
 
 
 
  1. filename = 'programming.txt' 
  2. with open(filename, 'w') as f: 
  3.     f.write("I love programming!\n") 
  4.     f.write("I love creating new games.\n") 
  • 追加寫入文件
 
 
 
  1. filename = 'programming.txt' 
  2. with open(filename, 'a') as f: 
  3.     f.write("I also love working with data.\n") 
  4.     f.write("I love making apps as well.\n") 

文件路徑

當Python運行open()函數時,它會在存儲正在執(zhí)行的程序的同一目錄中查找文件。可以使用相對路徑從子文件夾中打開文件。也可以使用絕對路徑來打開系統(tǒng)中的任何文件。

  • 從子文件夾中打開文件
 
 
 
  1. f_path = "text_files/alice.txt" 
  2. with open(f_path) as f_obj: 
  3.     lines = f_obj.readlines() 
  4. for line in lines: 
  5.     print(line.rstrip()) 
  • 使用絕對路徑打開文件
 
 
 
  1. f_path = "/home/ehmatthes/books/alice.txt" 
  2. with open(f_path) as f_obj: 
  3.     lines = f_obj.readlines() 
  • 在Windows上打開文件

Windows有時會錯誤地解釋正斜杠。如果遇到這種情況,請在文件路徑中使用反斜杠。

 
 
 
  1. f_path = r"C:\Users\ehmatthes\books\alice.txt" 
  2. with open(f_path) as f_obj: 
  3.     lines = f_obj.readlines() 

Except異常模塊

異常是幫助程序以適當方式響應錯誤的特殊對象。例如,如果程序試圖打開一個不存在的文件,可以使用異常來顯示一個信息豐富的錯誤消息,而不是使程序崩潰。

將可能導致錯誤的代碼放置在try塊中。響應錯誤時應該運行的代碼位于except塊中。只有在try塊成功時才應該運行的代碼被放入else塊。

 
 
 
  1. prompt = "How many tickets do you need? " 
  2. num_tickets = input(prompt) 
  3. try: 
  4.     num_tickets = int(num_tickets) 
  5. except ValueError: 
  6.     print("Please try again.") 
  7. else: 
  8.     print("Your tickets are printing.") 

try-except代碼塊

  • 處理ZeroDivisionError異常
 
 
 
  1. try: 
  2.     print(5/0) 
  3. except ZeroDivisionError: 
  4.     print("You can't divide by zero!") 
  • 處理FileNotFoundError異常
 
 
 
  1. f_name = 'siddhartha.txt' 
  2. try: 
  3.     with open(f_name) as f_obj: 
  4.         lines = f_obj.readlines() 
  5. except FileNotFoundError: 
  6.     msg = "Can't find file {0}.".format(f_name) 
  7.     print(msg) 

在編寫代碼時,很難知道要處理哪種異常。嘗試編寫沒有try塊的代碼,并讓它生成一個錯誤?;厮輰⒏嬖V您程序需要處理哪種異常。

else代碼塊

try塊應該只包含可能導致錯誤的代碼。任何依賴于try塊成功運行的代碼都應該放在else塊中。

  • 使用else塊
 
 
 
  1. print("Enter two numbers. I'll divide them.") 
  2. x = input("First number: ") 
  3. y = input("Second number: ") 
  4. try: 
  5.     result = int(x) / int(y) 
  6. except ZeroDivisionError: 
  7.     print("You can't divide by zero!") 
  8. else: 
  9.    print(result) 
  • 防止用戶輸入導致的崩潰

如果沒有下面示例中的except塊,如果用戶試圖除零,程序將崩潰。正如所寫的,它將優(yōu)雅地處理錯誤并繼續(xù)運行。

 
 
 
  1. # 一個簡單的除法計算器。 
  2. print("Enter two numbers. I'll divide them.") 
  3. print("Enter 'q' to quit.") 
  4. while True: 
  5.     x = input("\nFirst number: ") 
  6.     if x == 'q': 
  7.         break 
  8.     y = input("Second number: ") 
  9.     if y == 'q': 
  10. break 
  11.     try: 
  12.         result = int(x) / int(y) 
  13.     except ZeroDivisionError: 
  14.         print("You can't divide by zero!") 
  15.     else: 
  16.         print(result) 

默默地失敗

有時希望程序在遇到錯誤時繼續(xù)運行,而不向用戶報告錯誤。在else塊中使用pass語句可以做到這一點。

  • 在else塊中使用pass語句
 
 
 
  1. f_names = ['alice.txt', 'siddhartha.txt', 
  2.            'moby_dick.txt', 'little_women.txt'] 
  3. for f_name in f_names: 
  4.     # 報告找到的每個文件的長度。 
  5.     try: 
  6.         with open(f_name) as f_obj: 
  7.             lines = f_obj.readlines() 
  8.     except FileNotFoundError: 
  9.         # 繼續(xù)看下一個文件。 
  10.         pass  
  11.   else: 
  12.         num_lines = len(lines) 
  13.         msg = "{0} has {1} lines.".format( 
  14.             f_name, num_lines) 
  15.         print(msg) 

避免空的except塊

異常處理代碼應該捕獲在程序執(zhí)行期間預期發(fā)生的特定異常??盏膃xcept塊將捕獲所有異常,包括在強制關閉程序時可能需要的鍵盤中斷和系統(tǒng)退出。

如果你想使用try塊,但又不確定要捕獲哪個異常,那么使用exception。它將捕獲大多數異常,但仍然允許您故意中斷程序。

  • 避免空的except塊
 
 
 
  1. try: 
  2.    # Do something 
  3. except: 
  4.    pass 
  • 使用Exception
 
 
 
  1. try: 
  2.     # Do something 
  3. except Exception: 
  4.     pass 
  • 打印異常
 
 
 
  1. try: 
  2.     # Do something 
  3. except Exception as e: 
  4.     print(e, type(e)) 

使用json存儲數據

json模塊允許您將簡單的Python數據結構轉儲到一個文件中,并在程序下次運行時從該文件加載數據。JSON數據格式不是特定于Python的,所以你也可以與使用其他語言的人共享這類數據。

在處理存儲的數據時,了解如何管理異常非常重要。在處理數據之前,通常希望確保試圖加載的數據存在。

  • 使用json.dump()存儲數據
 
 
 
  1. # 存儲一些數字。 
  2. import json 
  3. numbers = [2, 3, 5, 7, 11, 13] 
  4. filename = 'numbers.json' 
  5. with open(filename, 'w') as f_obj: 
  6.     json.dump(numbers, f_obj) 
  • 使用json.load()存儲數據
 
 
 
  1. # 加載一些以前存儲的數字。 
  2. import json 
  3. filename = 'numbers.json' 
  4. with open(filename) as f_obj: 
  5.     numbers = json.load(f_obj) 
  6. print(numbers) 
  • 確保存儲的數據存在
 
 
 
  1. import json 
  2. f_name = 'numbers.json' 
  3. try: 
  4.     with open(f_name) as f_obj: 
  5.         numbers = json.load(f_obj) 
  6. except FileNotFoundError: 
  7.     msg = "Can’t find {0}.".format(f_name) 
  8.     print(msg) 
  9. else: 
  10.     print(numbers) 

決定報告哪些錯誤

編寫良好、經過適當測試的代碼不太容易出現內部錯誤,比如語法或邏輯錯誤。但是,每當你的程序依賴于諸如用戶輸入或文件存在之類的外部因素時,就有可能引發(fā)異常。

如何將錯誤傳達給用戶取決于你自己。有時用戶需要知道一個文件是否丟失了;有時最好是靜默地處理錯誤。一點經驗會幫助你知道該報告多少。


本文題目:一文搞懂文件操作與異常模塊
網址分享:http://m.5511xx.com/article/cogdpch.html