Python 學習筆記(3)
- 2021 年 2 月 27 日
- 筆記
- Python 學習筆記
Python 文件I/O
讀取鍵盤輸入:
Python提供了兩個內置函數從標準輸入讀入一行文本,默認的標準輸入是鍵盤:
1. raw_input
#函數從標準輸入讀取一個行,並返回一個字元串(去掉結尾的換行符) str = raw_input("請輸入:") print ("你輸入的內容是: ", str) #結果: 請輸入:Hello Python! 你輸入的內容是: Hello Python!
註:python3以後的版本就將該函數刪除了(可能是和input太像了,input完全可以替代它)
2.input
input([prompt]) 函數和 raw_input([prompt]) 函數基本類似
str = input("請輸入:") print "你輸入的內容是: ", str # input 可以接收一個Python表達式作為輸入,並將運算結果返回 #結果: 請輸入:[x*5 for x in range(2,10,2)] 你輸入的內容是: [10, 20, 30, 40]
把數據輸入到文件中
fp = open('text.txt', 'a+')
print("helloWorld", file=fp)
fp.close()
注意:要寫成file=fp 如果只寫fp會創建新文件,但不會再文件內輸入內容
參數類型:
b : 二進位模式
+ :打開一個文件進行更新(可讀可寫)
r :以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式
w:打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件
a:打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入
write()方法
write()方法不會在字元串的結尾添加換行符('\n'):
# 打開一個文件 fo = open("foo.txt", "w") fo.write( "www.runoob.com!\nVery good site!\n") # 關閉打開的文件 fo.close() $ cat foo.txt www.runoob.com! Very good site!
read()方法
#在這裡,被傳遞的參數是要從已打開文件中讀取的位元組計數。該方法從文件的開頭開始讀入,
#如果沒有傳入count,它會嘗試儘可能多地讀取更多的內容,很可能是直到文件的末尾。 fo = open("foo.txt", "r+") str = fo.read(10) print "讀取的字元串是 : ", str 讀取的字元串是 : www.runoob
文件定位
tell():方法告訴你文件內的當前位置, 換句話說,下一次的讀寫會發生在文件開頭這麼多位元組之後
seek(offset [,from]):
offset:要移動的位元組數
from:指定開始移動位元組的參考位置 0:文件的開頭 1: 當前的位置 2: 文件的末尾
# 打開一個文件 fo = open("foo.txt", "r+") str = fo.read(10) print "讀取的字元串是 : ", str # 查找當前位置 position = fo.tell() print "當前文件位置 : ", position # 把指針再次重新定位到文件開頭 position = fo.seek(0, 0) str = fo.read(10) print "重新讀取字元串 : ", str # 關閉打開的文件 fo.close() 讀取的字元串是 : www.runoob 當前文件位置 : 10 重新讀取字元串 : www.runoob
python 異常處理
語法:
try: <語句> #運行別的程式碼 except <名字>: <語句> #如果在try部份引發了'name'異常 except <名字>,<數據>: <語句> #如果引發了'name'異常,獲得附加的數據 else: <語句> #如果沒有異常發生
try的工作原理是,當開始一個try語句後,python就在當前程式的上下文中作標記,這樣當異常出現時就可以回到這裡,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。
例如:
try: fh = open("testfile", "w") fh.write("這是一個測試文件,用於測試異常!!") except IOError: print "Error: 沒有找到文件或讀取文件失敗" else: print "內容寫入文件成功" fh.close()
使用exception不帶任何異常類型
此時try-except語句捕獲所有發生的異常。
但這不是一個很好的方式,我們不能通過該程式識別出具體的異常資訊。
try-fnally語句
try-finally 語句無論是否發生異常都將執行最後的程式碼
try: fh = open("testfile", "w") fh.write("這是一個測試文件,用於測試異常!!") finally: print "Error: 沒有找到文件或讀取文件失敗"
異常的參數
一個異常可以帶上參數,可作為輸出的異常資訊參數。
# 定義函數 def temp_convert(var): try: return int(var) except ValueError, Argument: print "參數沒有包含數字\n", Argument # 調用函數 temp_convert("xyz");
$ python test.py
參數沒有包含數字
invalid literal for int() with base 10: 'xyz'
觸發異常
raise [Exception [, args [, traceback]]]
語句中 Exception 是異常的類型(例如,NameError)參數標準異常中任一種,args 是自已提供的異常參數。
最後一個參數是可選的(在實踐中很少使用),如果存在,是跟蹤異常對象
# 定義函數 def mye( level ): if level < 1: raise Exception,"Invalid level!" # 觸發異常後,後面的程式碼就不會再執行 try: mye(0) # 觸發異常 except Exception,err: print 1,err else: print 2 $ python test.py 1 Invalid level!
自定義異常
異常應該是典型的繼承自Exception類,通過直接或間接的方式。
class Networkerror(Exception): def __init__(self, arg): self.args = arg try: raise Networkerror("bad hostname") except Networkerror as e : #e 是用於創建Networkerror類的實例 註:3.9版本後都改用as,之前版本可以用逗號, print(e.args)
