溫故而知新--day3

溫故而知新--day3

文件操做

在python對文件操做用的是open函數,其通常使用形式是f = open(file, encoding,mode)file是文件路徑,encoding是文件編碼,mode是打開文件的模式,f稱爲文件句柄。
通常的文件編碼有:html

  • ASCII碼, 總共有 128 個。
  • ISO-8859-1,別名爲Latin1,涵蓋了大多數西歐語言字符,單字節編碼,它總共能表示 256 個字符。
  • Unicode,它只是一個符號集,它只規定了符號的二進制代碼,卻沒有規定這個二進制代碼應該如何存儲。
  • UTF-8,Unicode 的實現方式之一,是一種變長的編碼方式。
  • GB2312,全稱《信息交換用漢字編碼字符集 基本集》,總共包含 682 個符號、 6763 個漢字。
  • GBK,是國家技術監督局爲 windows95 所制定的新的漢字內碼規範,擴展了 GB2312。

默認以操做系統的編碼方式打開python

打開文件的模式有:git

模式 符號
r
w
追加 a
字節形式 b
文本形式 t
更新(可讀可寫) +

默認mode="rt"github

讀取文件的方法有一下幾個:windows

  • .read(n=-1) 讀取文件,默認所有讀取
  • .readline() 讀取一行
  • .readlines() 讀取所有,放入到list中

一些與讀取相關的方法:markdown

  • .readable() 是否可讀
  • tell() 顯示光標位置
  • .seek() 設置光標位置
  • .close() 關閉文件
  • .closed 文件是否關閉

假若有這樣一個文件(./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

  • 0 默認值,以絕對位置移動
  • 1 以相對位置移動
  • 2 從文件尾部移動

注意:非默認模式(12)時,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-excepttry中寫正常的邏輯代碼,而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
個人博客
個人筆記

相關文章
相關標籤/搜索