【head First python】之文件與異常處理

【head First python】之文件與異常處理


上一章我們談到如何處理嵌套列表中的數據,這一節將講到如何處理來自文件中的數據及異常處理辦法。


python是如何處理文件的?

Demo:

file = open('sketch.txt')#使用open函數打開文件並賦值給file
print(file.readline())#讀文件第一行數據
print(file.readline())#讀文件第二行數據
file.seek(0)#回到文件第一行
print(file.readline())#再讀第一行
file.close()#關閉文件,使python不再調用


這裏就拿附件中的文件做操作,下面是針對該文件邏輯特點寫的代碼

Demo:


import os
a = os.getcwd()
print(a)  #打印出當前工作目錄
os.chdir('C:\\Users\\haohu\Desktop')#修改當前工作目錄
a = os.getcwd()
print(a)  #再打印出當前工作目錄,文件要放在工作目錄中!
if os.path.exists('sketch.txt'):#判斷文件是否存在
    f = open('sketch.txt')
    for i in f:
        if i.find(':') != -1:#判斷是否具備分割條件,這裏爲是否有:做爲條件
            (role,  line) = i.split(':',1)#使用split函數並且將:前後分別賦值,,且只切割1個:
            print(role,end='')#打印:前的內容
            print('|||',end='')#萬惡的分割線
            print(line,end='')#打印:後的內容
    f.close()
else:
    print('未發現sketch.txt文件')

從上面例子可以看到除了open還多了很多處理該文件的邏輯條件,如split,find,os.path.exists等,看起來是否很複雜,如果該文件中的數據更多,或許需要添加更多的代碼去處理這些特定邏輯,否則就等着debug!!



現在,我們就可以使用try/except的方式來處理這些不確定的邏輯條件!

Demo:

try:
    可能藏有錯誤邏輯的代碼
except:
    自定義的恢復錯誤代碼

看起來是不是很酷?讓我們改進一下代碼!

Demo:

import os
a = os.getcwd()
print(a)  #打印出當前工作目錄
os.chdir('C:\\Users\\haohu\Desktop')#修改當前工作目錄
a = os.getcwd()
print(a)  #再打印出當前工作目錄,文件要放在工作目錄中!
try:
    f = open('sketch.txt')
    for i in f:
        try:
            (role,  line) = i.split(':',1)#使用split函數並且將:前後分別賦值,,且只切割1個:
            print(role,end='')#打印:前的內容
            print('|||',end='')#萬惡的分割線
            print(line,end='')#打印:後的內容
        except ValueError: #錯誤類型爲Value
            print('error')
    f.close()
except IOError: #錯誤類型爲IO
    print('未發現sketch.txt文件')

是不是很棒?不僅不需要在代碼中添加不是必要的處理邏輯與代碼,而且可以看到使用try/except可以自己定義錯誤類型與錯誤提示代碼,%100的調試利器!


小結:

一:open()函數可以打開一個文件,並創建一個迭代器從文件讀取數據,一次讀取一個數據行。

二:readline()方法從一個打開的文件讀取一行數據。

三:seek()方法可以用來將文件"退回"至起始位置

四:close()方法關閉open()打開的文件

五:split()方法可以將一個字符串根據相應的條件分解爲幾段

六:ValueError錯誤類型爲數據不符合期望的格式時出現

七:IOError爲無法正常訪問文件時出現

八:find()方法會在一個字符串中查找一個指定的項,如果查不到則返回-1

九:可以在except:下面寫pass,大概等同null或空,也就是當錯誤發生時忽略,什麼也不做!

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