python基礎知識整理檔案和異常(九)

2021-10-05 08:21:54 字數 4130 閱讀 1161

------ 檔案和異常------
------從檔案中讀取資料------

先建立檔案qingtian.txt

with open (『qingtian.txt』,』+r』,encoding=『utf-8』) as f:

a=f.read()

print(a)

------- 檔案的路徑-------

—相對路徑—

根據你組織檔案的方式,有時可能要開啟不在程式檔案所屬目錄中的檔案。例如,你可能將程式檔案儲存在了資料夾python_work中,而在資料夾python_work中,有乙個名為

text_files的資料夾,用於儲存程式檔案操作的文字檔案。雖然資料夾text_files包含在資料夾python_work中,但僅向open() 傳遞位於該資料夾中的檔案的名稱也不可行,因為python 只在資料夾python_work中查詢,而不會在其子資料夾text_files中查詢。要讓python開啟不與程式檔案位於同乙個目錄中的檔案,需要提供檔案路徑 ,它讓python到系統的特定位置

去查詢。

由於資料夾text_files位於資料夾python_work中,因此可使用相對檔案路 徑來開啟該資料夾中的檔案。相對檔案路徑讓python到指定的位置去查詢,而該位置是相對於當前執行的程

with open(『text_files/filename.txt』) as file_object:

a=file_object.read()

print(a)

—絕對路徑—

還可以將檔案在計算機中的準確位置告訴python,這樣就不用關心當前執行的程式儲存在什麼地方了。這稱為絕對檔案路徑 。

import os

file_path = 『python_18/qingtian.txt』

with open(file_path) as file_object:

a = file_object.read()

print(a)

異常python使用被稱為異常 的特殊物件來管理程式執行期間發生的錯誤。每當發生讓python不知所措的錯誤時,它都會建立乙個異常物件。如果你編寫了處理該異常的**,程式將繼

續執行;如果你未對異常進行處理,程式將停止,並顯示乙個traceback,其中包含有關異常的報告。

異常是使用try-except **塊處理的。try-except **塊讓python執行指定的操作,同時告訴python發生異常時怎麼辦。使用了try-except **塊時,即便出現異常,

程式也將繼續執行:顯示你編寫的友好的錯誤訊息,而不是令使用者迷惑的traceback

for example①

print(5/0)

執行後顯示

traceback (most recent call last):

file 「c:/users/xiaoliu/documents/tencent files/3230614498/filerecv/異常.py」, line 36, in

print(5/0)

zerodivisionerror: division by zero

使用try-except**塊

try:

print(5/0)

except zerodivisionerror:

print(「you can』t divide by zero!」)

for example ②

print(「give me two numbers, and i』ll divide them.」)

print(「enter 『q』 to quit.」)

while true:

first_number = input("\nfirst number: ")

if first_number == 『q』:

break

second_number = input("second number: ")

if second_number == 『q』:

break

answer = int(first_number) / int(second_number)

print(answer)

當輸入first number為5 last number為0時異常

對上面的**進行優化 新增異常

print(「give me two numbers, and i』ll divide them.」)

print(「enter 『q』 to quit.」)

while true:

first_number = input("\nfirst number: ")

if first_number == 『q』:

break

second_number = input("second number: ")

try:

answer = int(first_number) / int(second_number)

except zerodivisionerror:

print(「you can』t divide by 0!」)

else:

print(answer)

處理檔案異常

filename = 『alice.txt』

with open(filename) as f_obj:

contents = f_obj.read()

進行處理

filename = 『alice.txt』

try:

with open(filename) as f_obj:

contents = f_obj.read()

except filenotfounderror:

msg = 「sorry, the file " + filename + " does not exist.」

print(msg)

對文字分析(當檔案存在時有字母時)

filename = 『alice.txt』

try:

with open(filename) as f_obj:

contents = f_obj.read()

except filenotfounderror:

msg = 「sorry, the file " + filename + " does not exist.」

print(msg)

else:

# 計算檔案大致包含多少個單詞

words = contents.split()

num_words = len(words)

print(「the file " + filename + " has about " + str(num_words) + " words.」)

失敗時可以直接pass例如

def count_words(filename):

「」「計算乙個檔案大致包含多少個單詞」""

try:

# 監控**塊

with open(filename) as f_obj:

contents = f_obj.read()

except filenotfounderror:

pass#失敗直接pass處理

else:

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)

-----異常裡面的finally-----

finally是無論異常不異常都會執行的模組

try:

# 監控**塊

except +異常型別 as+別名異常

# 進行異常處理:

raise 別名異常(把異常丟擲來可加也可以不加)

else:

執行程式(不異常時進行的**塊)

finally:

執行程式(無論異常異常不異常都執行的可以加也可以不加)

python基礎知識整理

一 資料型別 整型 int 浮點型 float 複數型 字串型 二 輸入輸出 nnum input 請輸入 print 輸出的是 nnum print d nnum 三 選擇結構 if elif else 四 運算子 會得到小數 整除 次方 五 列表 list 元組 tuple 字典 dict so...

python基礎知識整理2

可迭代物件 可 於迭代操作 for 迴圈 的物件。擁有 iter 法的物件 注意 iter 法的返回值是迭代器物件 迭代器任何由實現了 iter 法的類建立的物件都是可迭代對 象。任何由實現了 iter 和 next 法的類建立的物件 都是迭代器物件。迭代器是懶載入的 延遲載入的 使 for對迭代器...

python基礎知識整理(一)

brew install python31 mac自帶python2.7,用上述方法安裝了python3之後,mac會將預設的2.7版本變為3的版本,因為此時,系統預設的py啟動路徑,由原來的mac系統預設的直譯器變為當前使用者安裝的py直譯器 2 再想用python2.7版本時,在ide選擇ven...