在python對文件操做用的是open
函數,其通常使用形式是f = open(file, encoding,mode)
。file
是文件路徑,encoding
是文件編碼,mode
是打開文件的模式,f
稱爲文件句柄。
通常的文件編碼有:html
默認以操做系統的編碼方式打開python
打開文件的模式有:git
模式 | 符號 |
---|---|
讀 | r |
寫 | w |
追加 | a |
字節形式 | b |
文本形式 | t |
更新(可讀可寫) | + |
默認mode="rt"github
讀取文件的方法有一下幾個:windows
一些與讀取相關的方法:markdown
假若有這樣一個文件(./test.txt
):dom
test file line1 test file line2 test file line3
使用open例子:函數
f = open("./test.txt", mode="r", encoding="utf-8")
print(f.readable()) # True
print(f.read())
print(f.tell()) # 49 # 查看光標位置
f.seek(0) # 把光標放到開頭位置
print(repr(f.readline())) # 'test file line1\n'
print(f.readlines()) # ['test file line2\n', 'test file line3']
f.close() # 關閉文件
print(f.closed) # True
直接用open操做文件時,不要忘了使用close()方法關閉文件編碼
seek補充
seek方法有三種模式,用第二個參數的值肯定。spa
注意:非默認模式(1
或2
)時,Python 要求文件必需要以二進制格式(b
)打開,不然會拋出io.UnsupportedOperation
錯誤。
例子
# test.txt有44個字符
f = open("./test.txt", mode="rb")
f.seek(10, 0) # 默認形式,以絕對位置
print(f.tell()) # 10
f.seek(10, 1) # 相對位置,往前移10個字符
print(f.tell()) # 20
f.seek(-10, 2) # 從文件尾部開始移動,注意數值是負數的
print(f.tell()) # 34
f.close()
使用寫的方法會把原文件清空而後從新寫入,一樣先列出其相關方法:
例子:
f = open("./test.txt", mode="w", encoding='utf-8')
print(f.writable())
f.write("new line1\n")
f.writelines(["new line2\n", "new line3\n"])
f.close()
寫的時候寫入字符串或字節類型(根據mode參數而定)
f = open("./test.txt", mode="w", encoding='utf-8')
f.write("new line1\n")
f.close()
# 字節方式
f = open("./test.txt", mode="bw")
f.write("new line2\n".encode('utf-8'))
f.close()
追加,即在原文件的尾部寫入。
f = open("./test.txt", mode="a", encoding='utf-8')
print(f.tell()) # 33 # 在最後
f.write("new line4\n")
f.close()
open支持上下文管理協議,便可以與with函數結合使用,使用with函數,咱們就不須要在最後使用close()
方法,手動將文件關閉了。
with open("./test.txt", "r", encoding='utf-8') as f:
print(f.read())
python使用try-except-else-finally
的形式處理異常,通常來講,經常使用的格式是try-except
,try
中寫正常的邏輯代碼,而except
中寫處理異常的代碼。else
表示try中代碼不出錯時執行;finally
中的代碼無論出不出錯多執行,能夠在這裏寫釋放資源等的代碼。
例子一:
try:
print(1234)
raise Exception("手動觸發的異常")
except Exception as e:
print(e) # 手動觸發的異常
finally:
print("finally執行了")
例子二:
try:
print(1234)
#raise Exception("手動觸發的異常")
except Exception as e:
print(e) # 手動觸發的異常
else:
print("正常執行了")
finally:
print("finally執行了")
在python內部有一些內置的異常類,通常來講咱們能夠直接使用他們,假如是特殊的狀況,咱們能夠繼承其中一個類,本身自定義異常類。
自定義異常類例子:
class NumError(ValueError):
"""輸入小於0參數的異常類"""
def __init__(self, num):
# 寫你須要的參數
self.num = num
def __str__(self):
# 描述信息
return "數值不能小於0,你輸入的數值爲%d" % self.num
def test(num):
if num > 0:
print("processing ....")
else:
raise NumError(num) # 手動拋出異常
def main():
test(2)
test(-1) # __main__.NumError: 數值不能小於0,你輸入的數值爲0
if __name__ == '__main__':
main()