Head First Python Chapter3:檔案讀取和異常處理

來源:互聯網
上載者:User

標籤:python   異常處理   

第三章中主要介紹了簡單的檔案讀取和簡單的異常處理操作。

首先建立檔案目錄:HeadFirstPython\chapter3,在Head First Pythong官方網站下載需要使用的檔案:sketch.txt,並放入到之前建好的目錄中。

相關文法讀取檔案
the_file = open(‘sketch.txt)  # 開啟檔案,擷取到檔案對象# 對檔案中的資料進行一些處理the_file.close() # 關閉檔案
異常捕獲
import systry:    # 可能會出現異常的代碼    f = open(‘myfile.txt‘)    s = f.readline()    i = int(s.strip())# 對異常進行處理# 類似於Java中的catch塊except OSError as err: # 可以指定待捕獲的異常    print("OS error: {0}".format(err))except ValueError:    pass # 不做任何操作,直接跳過except:    print("Unexpected error:", sys.exc_info()[0])
互動式環境下擷取檔案

在python互動環境中(pyhton idle)中,可以使用如下的一些命令進行一些檔案操作:

>>> import os # 從標準庫匯入os>>> os.getcwd() # 擷取當前的工作目錄,類似於Linux下的pwd‘D:\\program\\Python34‘>>> os.chdir("D:\code\python\HeadFirstPython\chapter3") # 切換工作目錄>>> os.getcwd()‘D:\\code\\python\\HeadFirstPython\\chapter3‘>>> data = open(‘sketch.txt‘) # 開啟檔案,擷取到檔案對象,相當於一個迭代器iterator>>> print(data.readline(),end="") # 讀取檔案的一行,data.readline()Man: Is this the right room for an argument?>>> print(data.readline(),end="")Other Man: I‘ve told you once.>>> data.seek(0) # 使data回到檔案起始位置0# 使用for迴圈獲得檔案的每一行>>> for eachline in data:    print(eachline,end="")
對資料進一步的處理:異常處理

再看一下檔案中的資料,發現每一行都是用“:”進行分隔的,因此考慮在輸出時進行最佳化。在對檔案進行處理時,會出現相應的問題,比如檔案中有些行是不含有“:”的,這時就會跑拋出ValueError異常,當檔案不存在或者讀取失敗時,則會拋出IOError,等等。面對這些異常,有兩種處理思路:
1. 提前考慮好程式中可能出現的異常,對這些情況進行處理,從而避免異常的發生。
2. 採用異常捕獲機制:讓異常發生,但是對異常進行捕獲,捕獲到後再進行相關的操作。

第一種思路:
import osif os.path.exists(‘sketch.txt‘):    data = open(‘sketch.txt‘)    for each_line in data:        if each_line.find(‘:‘) != -1:            (role, line_spoken) = each_line.split(‘:‘, 1)            print(role, end=‘‘)            print(‘ said: ‘, end=‘‘)            print(line_spoken,end=‘‘)    data.close()else:    print(‘檔案不存在!‘)
第二種思路:捕獲異常:
try:    data = open(‘sketch2.txt‘)    for each_line in data:        # if each_line.find(‘:‘) != -1:        try:            (role, line_spoken) = each_line.split(‘:‘, 1)            print(role, end=‘‘)            print(‘ said: ‘, end=‘‘)            print(line_spoken,end=‘‘)        except:            pass # 不做任何操作,直接跳過    data.close()except:    print(‘檔案不存在‘)
相關知識點

1、split():對字串進行分割,函數原型是str.split(sep=None, maxsplit=-1),它包含兩個參數,第一個是使用分割符,第二個是最大分割次數。如:

>>> ‘1,2,3‘.split(‘,‘)[‘1‘, ‘2‘, ‘3‘]>>> ‘1,2,3‘.split(‘,‘, maxsplit=1)[‘1‘, ‘2,3‘]>>> ‘1,2,,3,‘.split(‘,‘)[‘1‘, ‘2‘, ‘‘, ‘3‘, ‘‘]>>> ‘1 2 3‘.split()[‘1‘, ‘2‘, ‘3‘]>>> ‘1 2 3‘.split(maxsplit=1)[‘1‘, ‘2 3‘]>>> ‘   1   2   3   ‘.split()[‘1‘, ‘2‘, ‘3‘]

2、open():用來讀取檔案,同時建立了一個迭代器,可以對檔案進行按行讀取
3、readline():讀取檔案的一行
4、seek():將迭代器重新指向檔案的開始處(第一行)
5、close():關閉開啟的檔案
6、find():尋找子串在字串中的位置,不存在則返回-1

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Head First Python Chapter3:檔案讀取和異常處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.