本篇 ShengYu 介紹 Python open with 用法與範例,
以下 Python open with 用法與範例將分為這幾部份,
- Python open with 開檔讀取文字檔
- Python open with 指定讀取檔案的編碼格式
- Python open with 開檔寫入文字檔
- Python open with 開檔讀取二進制檔
- Python open with 開檔寫入二進制檔
那我們開始吧!
Python open with 開檔讀取文字檔
Python 要讀取一個文字檔會先用 open 來開檔,在 open()
函式裡的第一個引數放入檔案路徑名稱,第二個引數為開檔模式,有讀檔模式、寫入模式或讀寫模式等等,讀檔模式就用 'r'
,像這樣寫,1
2
3
4
5
6
7#!/usr/bin/env python3
# -*- coding: utf-8 -*-
f = open('xxx.txt', 'r')
text = f.read()
print(text)
f.close()
如果開檔有問題,例如要開啟的檔案不存在,open()
函式就會拋出一個 IOError 的錯誤,並且給出錯誤碼和詳細的資訊告訴你檔案不存在,1
2
3Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'xxx.txt'
如果開檔成功的話,那麼接下來可以使用 read()
一次讀取該檔案的全部內容,或者使用 readlines()
搭配迴圈一次讀取一行文字,最後當檔案使用完畢時需要使用 close()
函式來關閉檔案,在檔案的開檔與讀取過程中都有可能會產生 IOError 例外錯誤,一旦出現例外錯誤,後面的 f.close()
函式就執行不到了,所以為了保證無論過程中有無出錯都要能正確地關閉檔案,我們可以使用 try… finially 來達成,像下述範例這樣寫,1
2
3
4
5
6
7
8
9
10
11#!/usr/bin/env python3
# -*- coding: utf-8 -*-
try:
f = open('xxx.txt', 'r')
text = f.read()
print(text)
except:
print('error')
finally:
f.close()
但這樣寫太繁瑣了,每次讀檔或寫檔都樣寫這樣的程式碼的話顯得很冗長。
好在 Python 提供了 with open 語句來解決這個問題,使用 Python with open 語句可以自動地幫我們呼叫 close()
關檔的動作,即使在 Python with open 語句裡發生例外也是一樣,而且這也是官方建議使用的方式,我們來看看 Python with open 語句怎麼寫,將上述範例改用 Python with open 語句後如下列範例所示,1
2
3
4
5
6#!/usr/bin/env python3
# -*- coding: utf-8 -*-
with open('xxx.txt', 'r') as f:
text = f.read()
print(text)
這寫法跟前述範例的 try… finially 寫法效果是一樣的,但是 Python with open 語句的程式碼明顯地更精簡更少,而且還不用呼叫 close()
函式關檔。
在某些情況下用 f.read()
是比較快速的選擇,例如檔案內容大小很小時,但有時可能不會採用一次全部讀取的方式,例如檔案內容超大無法一次讀取到記憶體,或者想要分批每次一行處理,如果是想每次處理一行的話可以使用 readlines()
搭配迴圈像這樣寫,1
2
3
4
5
6#!/usr/bin/env python3
# -*- coding: utf-8 -*-
with open('xxx.txt', 'r') as f:
for line in f.readlines():
print(line)
Python open with 指定讀取檔案的編碼格式
Python open with 要指定讀取檔案的編碼格式,在 open()
設定 encoding
編碼格式即可,例如 Big-5 就這樣寫,1
2
3with open('xxx.txt', 'r', encoding='Big5') as f:
# or
f = open('xxx.txt', 'r', encoding='Big5')
UTF-8 就這樣寫,1
2
3with open('xxx.txt', 'r', encoding='UTF-8') as f:
# or
f = open('xxx.txt', 'r', encoding='UTF-8')
為了解決各種編碼問題,例如簡體中文與繁體中文,通常我們都會把編碼統一都轉成萬國碼 unicode。
如果遇到編碼錯誤,例如 UnicodeDecodeError,這可能是檔案中包含的未定義的編碼字元,遇到這種狀況如果要忽略的話,可以這樣寫,1
2
3with open('xxx.txt', 'r', encoding='Big5', errors='ignore') as f:
# or
f = open('xxx.txt', 'r', encoding='Big5', errors='ignore')
Python open with 開檔寫入文字檔
這邊介紹 Python open with 開檔寫入文字檔的範例,根據前述讀取文字檔介紹的差不多,在寫入文字檔時 open()
開檔要用 w
模式,
原本的開檔寫入文字檔的寫法為這樣,用 write()
將文字寫入檔案裡,在作業系統裡會有一個緩衝區,直到緩衝區滿了才會真正寫入硬碟裡,除非使用 flush() 強制將緩衝區寫入硬碟了,或者 close() 也會將緩衝區剩下的資料寫入硬碟裡,所以沒有正確 close() 關閉檔案的文字檔很容易看到檔案尾巴是資料不完整的狀況,1
2
3
4
5
6
7#!/usr/bin/env python3
# -*- coding: utf-8 -*-
f = open('xxx.txt', 'w')
f.write('apple\n')
f.write('banana\n')
f.close()
所以這時要碼要用 try… finially 寫法來正確的處理例外以及關檔,或者可以使用 Python open with 的寫法,如下所示,1
2
3
4
5
6#!/usr/bin/env python3
# -*- coding: utf-8 -*-
with open('xxx.txt', 'w') as f:
f.write('apple\n')
f.write('banana\n')
Python open with 開檔讀取二進制檔
上述範例都是介紹文字檔的讀取與寫入,這邊要介紹二進制檔案的讀取,Python open with 讀取二進制檔案就需要在開檔模式裡加上 'b'
表示 binary 二進制模式,例如:二進制讀檔就要用 'rb'
,在上傳圖片、影片或其它檔案時就會用二進制開檔讀取,
原本的開檔讀取二進制檔寫法為這樣,1
2
3f = open('xxx.bin', 'rb')
# f.read()
# ...
改成 Python open with 來開檔讀取二進制檔案的寫法就會是這樣寫,1
2
3with open('xxx.bin', 'rb') as f:
# f.read()
# ...
Python open with 開檔寫入二進制檔
這一節介紹 Python open with 寫入二進制檔案,跟上一節概念相似,
原本的開檔寫入二進制檔寫法為這樣,1
2
3f = open('xxx.bin', 'wb')
# f.write()
# ...
改成 Python open with 來開檔寫入二進制檔案的寫法就會是這樣寫,1
2
3with open('xxx.bin', 'wb') as f:
# f.write()
# ...
以上就是 Python open with 用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!
其它相關文章推薦
Python 新手入門教學懶人包