溫故而知新--day3
檔案操作
在python對檔案操作用的是open函式,其一般使用形式是f = open(file, encoding,mode),file是檔案路徑,encoding是檔案編碼,mode是打開檔案的模式,f稱為檔案句柄,
一般的檔案編碼有:
- ASCII碼, 總共有 128 個,
- ISO-8859-1,別名為Latin1,涵蓋了大多數西歐語言字符,單位元組編碼,它總共能表示 256 個字符,
- Unicode,它只是一個符號集,它只規定了符號的二進制代碼,卻沒有規定這個二進制代碼應該如何存盤,
- UTF-8,Unicode 的實作方式之一,是一種變長的編碼方式,
- GB2312,全稱《資訊交換用漢字編碼字符集 基本集》,總共包含 682 個符號、 6763 個漢字,
- GBK,是國家技術監督局為 windows95 所制定的新的漢字內碼規范,擴展了 GB2312,
默認以作業系統的編碼方式打開
打開檔案的模式有:
| 模式 | 符號 |
|---|---|
| 讀 | r |
| 寫 | w |
| 追加 | a |
| 位元組形式 | b |
| 文本形式 | t |
| 更新(可讀可寫) | + |
默認mode="rt"
讀
讀取檔案的方法有一下幾個:
- .read(n=-1) 讀取檔案,默認全部讀取
- .readline() 讀取一行
- .readlines() 讀取全部,放入到list中
一些與讀取相關的方法:
- .readable() 是否可讀
- tell() 顯示游標位置
- .seek() 設定游標位置
- .close() 關閉檔案
- .closed 檔案是否關閉
假如有這樣一個檔案(./test.txt):
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方法有三種模式,用第二個引數的值確定,
- 0 默認值,以絕對位置移動
- 1 以相對位置移動
- 2 從檔案尾部移動
注意:非默認模式(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()
寫
使用寫的方法會把原檔案清空然后重新寫入,同樣先列出其相關方法:
- .write() 寫入
- .writelines() 以list形式迭代寫入
- .writable() 是否可以寫入
- .flush() 刷到硬碟保存
例子:
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
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()
我的github
我的博客
我的筆記
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/251402.html
標籤:Python
上一篇:python資料型別的強制轉換
