《Python編程:從入門到實踐》知識點 第10章 文件和異常

《Python編程:從入門到實踐》知識點 第2-4章

《Python編程:從入門到實踐》知識點 第5-7章

《Python編程:從入門到實踐》知識點 第8章 函數

《Python編程:從入門到實踐》知識點 第9章 類

從文件中讀取數據

  • 函數 open() 接受一個參數:要打開的文件的名稱。Python在當前執行的文件所在的目錄中查找指定的文件
  • 如果是跟py文件同一目錄下的文件夾裏的文件,可以用text_files\ filename .txt;如果不在同一目錄下,用絕對路徑
  • 關鍵字 with 在不再需要訪問文件後將其自動關閉
  • read()到達文件末尾時返回一個空字符串,而將這個空字符串顯示出來時就是一個空行。要刪除多出來的空行,可在print語句中使用rstrip()
  • 逐行讀取的時候,每行的末尾都有一個看不見的換行符,使用 rstrip() 消除這些多餘的空白行
  • 使用關鍵字with時,open()返回的文件對象只在with代碼塊內可用
#pi_digits.txt
3.1415926535
  8979323846
  2643383279

with open('E:\project\example\chapter_10\pi_digits.txt') as file_object:
    contents = file_object.read()
    print(contents.rstrip())

filename = 'E:\project\example\chapter_10\pi_digits.txt'
with open(filename) as file_object:
    #逐行讀取
    for line in file_object:
        print(line.rstrip())

寫入文件

  • open() 需要兩個實參,第一個實參是要打開的文件的名稱; 第二個實參有幾種模式,可指定讀取模式r寫入模式w附加模式a或讓你能夠讀取和寫入文件的模式r+默認只讀模式打開文件
  • 如果你要寫入的文件不存在,函數open()將自動創建
  • w模式打開文件,如果指定的文件已經存在,Python將在返回文件對象前清空該文件
  • 附加模式打開文件,不覆蓋原有的內容
  • 要讓每個字符串都單獨佔一行,需要在 write() 語句中包含換行符
filename = 'programming.txt'

with open(filename, 'a') as file_object:
    file_object.write("I also love finding meaning in large datasets.\n")
    file_object.write("I love creating apps that can run in a browser.\n")

異常

  • try-except-else代碼塊的工作原理大致如下:Python嘗試執行try代碼塊中的代碼;只有可能引發異常的代碼才需要放在try語句中。有時候,有一些僅在try代碼塊成功執行時才需要運行的代碼;這些代碼應放在else代碼塊中。except代碼塊告訴Python,如果它嘗試運行try代碼塊中的代碼時引發了指定的異常,該怎麼辦
  • 通過預測可能發生錯誤的代碼,可編寫健壯的程序,它們即便面臨無效數據或缺少資源,也能繼續運行,從而能夠抵禦無意的用戶錯誤和惡意的攻擊
  • pass語句,可在代碼塊中使用它來讓Python什麼都不要做
  • 只要程序依賴於外部因素,如用戶輸入、存在指定的文件、有網絡鏈接,就有可能出現異常
def count_words(filename):
    """Count the approximate number of words in a file."""
    try:
        with open(filename, encoding='utf-8') as f_obj:
            contents = f_obj.read() 
    except FileNotFoundError:
        pass
    else:
        # Count approximate number of words in the file.
        words = contents.split()
        num_words = len(words)
        print("The file " + filename + " has about " + str(num_words) + " words.")

filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt', 'little_women.txt']
for filename in filenames:
    count_words(filename)

存儲數據

  • 模塊json讓你能夠將簡單的Python數據結構轉儲到文件中,並在程序再次運行時加載該文件中的數據,還可以使用json在Python程序之間分享數據
  • json.dump() 來存儲,用 json.load() 來獲取
  • 使用文件擴展名.json來指出文件存儲的數據爲JSON格式
  • 重構是將代碼劃分爲一系列完成具體工作的函數
import json

def get_stored_username():
    """Get stored username if available."""
    filename = 'username.json'
    try:
        with open(filename) as f_obj:
            username = json.load(f_obj)
    except FileNotFoundError:
        return None
    else:
        return username

def get_new_username():
    """Prompt for a new username."""
    username = input("What is your name? ")
    filename = 'username.json'
    with open(filename, 'w') as f_obj:
        json.dump(username, f_obj)
    return username

def greet_user():
    """Greet the user by name."""
    username = get_stored_username()
    if username:
        print("Welcome back, " + username + "!")
    else:
        username = get_new_username()
        print("We'll remember you when you come back, " + username + "!")

greet_user()

《Python編程:從入門到實踐》知識點 第11章 測試代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章