open() 與 io 模組

Justin Lin
Justin LinTechnology / Community Evangelist at Free lancer
open() 與 io 模組
8. open() 與 io 模組
• 學習目標
– 使用 open()函式
– 使用 stdin、stdout、
stderr
– 認識檔案描述器
– 認識 io 模組
使用 open() 函式
• 在最基本的需求上,只需要使用到它的前
兩個參數:file 與 mode
read()、write()、close()
read() 方法
• 在未指定引數的情況下,會讀取檔案全部
的內容
在指定整數引數的情況下,會讀取指定的
字元數或位元組數(依開啟模式是文字或
者二進位而定)
• 檔案開啟模式與後續進行的操作必須符合,
否則引發 UnsupportedOperation 例外
• 可以使用 readable() 方法測試是否可讀
取,使用 writable() 方法測試可否寫入
readline()、readlines()、
writelines()
• 對於文字模式來說,預設是讀取到'n'、
'r'或'rn',都可以被判定為一行
• readline()或readlines()讀到的每一
行,換行字元都一律換為'n'。
• 對於二進位模式來說,行的判斷標準預設
是遇到b'n'這個bytes
• 文字模式在寫入的情況下, 任何'n'都
會被置換為os.linesep 的值(Windows
就是'rn')
open() 與 io 模組
• 逐行讀取檔案內容
• Python 的檔案讀取風格:讀取一個檔案最
好的方式,就是不要去 read!
• 在進行檔案讀寫時,tell() 方法可以告知
目前在檔案中的位移值,單位是位元組值,
檔案開頭的位移值是 0
• seek() 方法可以指定跳到哪個位移值
• 可以使用 seek() 來實現隨機存取
• 可以執行 flush() 方法,將緩衝內容出清
readinto()
• buffering 參數用來設置緩衝策略
• 預設的緩衝策略會試著自行決定緩衝大小
(通常會是 4096 或 8192 位元組)
• 或者對互動文字檔案採用行緩衝(line
buffering)
• 如果 buffering 設定為0,表示關閉緩衝
• 設定為大於0 的整數值,表示指定緩衝的位
元組大小
• encoding 指定文字模式時的檔案編碼
• 預設採用 locale.getpreferredencoding()
的傳回值作為編碼
• 如果文字檔案採用的編碼不同,讀取時就
有可能會出現亂碼問題
• 在正確指定 encoding 為 'UTF-8' 的情
況下,就不會有問題了:
• errors 參數可指定發生編碼錯誤時,該如
何進行處理
• 在不設定的情況下,發生編碼錯誤時會引
發 ValueError 的子類別例外
• newlines 的指定值還可以是''、'n'、
'r'與'rn'
• 如果指定了'',讀取到'n'、'r'或
'rn', 都可以被判定為一行, 而
readline()或readlines()讀到的每一
行,一律保留來源換行字元
• 如果設定為其他'n'、'r'或'rn',
那麼讀取後的換行字元就會是指定的字元
• 文字模式在寫入的預設情況下,任何'n'
都會被置換為os.linesep 的值
• 如果newline 設為''就保留原有的換行
字元,如果指定為其他值,就以指定的字
元進行置換
stdin、stdout、stderr
• 在 sys 模組中有個 stdin 就代表著標準輸
入,而 stdout 就代表著標準輸出
• 行為上就像 open() 函式開啟的文字模式
檔案物件
• 對於標準輸出或輸出, 若想二進位模式讀
取或寫入, 可使用sys.stdin.buffer
或sys.stdout.buffer
• 行為就像是以open()函式開啟的二進位模
式檔案物件
• 可以改變標準輸入或輸出的來源
• 將一個自行開啟的檔案物件,指定給
sys.stdout,就可以利用 print() 來寫
出資料至檔案
• 內建的 print() 函式本身,就有一個
file 參數可以達到這樣的需求
• 可以使用 >將程式執行時的標準輸出訊息,
導向至指定的檔案,或者使用 >> 附加訊息
• 標準錯誤的輸出不能使用 >或 >> 重新導向
至檔案
認識檔案描述器
• open() 函式的 file 參數,除了接受字串
指定檔案的路徑外,還可指定檔案描述器
• 檔案描述器會是個整數值,對應至目前程
式已開啟的檔案
• 標準輸入通常使用檔案描述器 0,標準輸出
是 1,標準錯誤是 2,進一步開啟的檔案則
會是 3、4、5 等數字
• 對於檔案物件,可以使用 fileno() 方法
來取得檔案描述器
• 如果指定 open() 的第一個參數為0 會如何
呢?
• 若能取得一個對應至系統上已開啟的檔案
描述器,就有機會使用 open() 來包裹成
為檔案物件,以利用檔案物件的高階行為
• open() 函式的 closed 參數預設值是
True
– 這表示若 open()時 file 指定了一個檔案
描述器,在檔案物件呼叫 close()方法而關
閉時,被指定的檔案描述器也會一併關閉
– 當指定為 False 時,就不會關閉被指定的檔
案描述器
• open() 還有個 opener 可以用來指定一
個函式,該函式必須有兩個參數
– 第一個參數會傳入 open() 函式被指定的檔
案路徑
– 第二個參數會是 open() 函式依 mode 而計
算出來的 flags 值,函式最後必須傳回一個
檔案描述器
–open() 函式基於該檔案描述器建立檔案物件,
以便進行檔案操作。
open() 與 io 模組
認識 io 模組
• open() 函式實際上是個工廠函式
• 若想進一步掌握檔案物件的操作,就得認
識 io 模組
• 檔案物件大致上分為三個主要類型
– 文字(Text)I/O
– 二進位(Binary)I/O
– 原始(Raw)I/O
open() 與 io 模組
open() 與 io 模組
• 原始 I/O 是無緩衝低階操作,少直接使用,
常作為文字 I/O 或二進位 I/O 底層操作
• TextIOWrapper 也是個包裹器,可以包
裹 BufferedIOBase,以便將二進位資料
依指定的文字編碼進行轉換
• 如果資料的讀取來源或寫入目的地,並不
是個檔案,而想要是記憶體中某個物件,
那麼可以使用 BytesIO 或 StringIO
• 通常使用 BytesIO 時,最後會使用
getvalue() 方法來取得寫入的資料
• 若想讀寫的是文字資料,可以使用 StringIO
1 of 40

Recommended

從 REPL 到 IDE by
從 REPL 到 IDE從 REPL 到 IDE
從 REPL 到 IDEJustin Lin
2.3K views27 slides
Python 起步走 by
Python 起步走Python 起步走
Python 起步走Justin Lin
7.2K views26 slides
《Python 3.5 技術手冊》第二章草稿 by
《Python 3.5 技術手冊》第二章草稿《Python 3.5 技術手冊》第二章草稿
《Python 3.5 技術手冊》第二章草稿Justin Lin
4.5K views28 slides
1. Python起步走 by
1. Python起步走1. Python起步走
1. Python起步走Justin Lin
664 views26 slides
Python 起步走 by
Python 起步走Python 起步走
Python 起步走Justin Lin
1.7K views26 slides
型態與運算子 by
型態與運算子型態與運算子
型態與運算子Justin Lin
1.8K views69 slides

More Related Content

What's hot

流程語法與函式 by
流程語法與函式流程語法與函式
流程語法與函式Justin Lin
510 views71 slides
Python匯出入csv以及繪製圖表初稿 by
Python匯出入csv以及繪製圖表初稿Python匯出入csv以及繪製圖表初稿
Python匯出入csv以及繪製圖表初稿jiannrong
8.8K views25 slides
7. 例外處理 by
7. 例外處理7. 例外處理
7. 例外處理Justin Lin
115 views64 slides
Py ladies 0928 by
Py ladies 0928Py ladies 0928
Py ladies 0928Chia-Yi Yen
1.3K views51 slides
Python系列3 by
Python系列3Python系列3
Python系列3數真 蔡
396 views43 slides
4. 流程語法與函式 by
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式Justin Lin
188 views76 slides

What's hot(18)

流程語法與函式 by Justin Lin
流程語法與函式流程語法與函式
流程語法與函式
Justin Lin510 views
Python匯出入csv以及繪製圖表初稿 by jiannrong
Python匯出入csv以及繪製圖表初稿Python匯出入csv以及繪製圖表初稿
Python匯出入csv以及繪製圖表初稿
jiannrong8.8K views
7. 例外處理 by Justin Lin
7. 例外處理7. 例外處理
7. 例外處理
Justin Lin115 views
Py ladies 0928 by Chia-Yi Yen
Py ladies 0928Py ladies 0928
Py ladies 0928
Chia-Yi Yen1.3K views
Python系列3 by 數真 蔡
Python系列3Python系列3
Python系列3
數真 蔡396 views
4. 流程語法與函式 by Justin Lin
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式
Justin Lin188 views
Python系列4 by 數真 蔡
Python系列4Python系列4
Python系列4
數真 蔡456 views
流程語法與函式 by Justin Lin
流程語法與函式流程語法與函式
流程語法與函式
Justin Lin2.6K views
函数调用关系工具-2011-孙光福 by Wu Liang
函数调用关系工具-2011-孙光福函数调用关系工具-2011-孙光福
函数调用关系工具-2011-孙光福
Wu Liang709 views
Python系列1 by 數真 蔡
Python系列1Python系列1
Python系列1
數真 蔡759 views
Coreseek/Sphinx 全文检索实践指南 by HonestQiao
Coreseek/Sphinx 全文检索实践指南Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南
HonestQiao1.1K views
8. open() 與 io 模組 by Justin Lin
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin245 views
open() 與 io 模組 by Justin Lin
open() 與 io 模組open() 與 io 模組
open() 與 io 模組
Justin Lin337 views
简单Pthon教程 by junjun chen
简单Pthon教程简单Pthon教程
简单Pthon教程
junjun chen508 views
Python简明教程 by ingong
Python简明教程Python简明教程
Python简明教程
ingong1.6K views
並行與平行 by Justin Lin
並行與平行並行與平行
並行與平行
Justin Lin2.7K views

Viewers also liked

例外處理 by
例外處理例外處理
例外處理Justin Lin
1.4K views62 slides
從模組到類別 by
從模組到類別從模組到類別
從模組到類別Justin Lin
1.7K views62 slides
資料結構 by
資料結構資料結構
資料結構Justin Lin
1.8K views62 slides
網站系統安全及資料保護設計認知 by
網站系統安全及資料保護設計認知網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知Justin Lin
3.8K views97 slides
OpenSCAD Workshop by
OpenSCAD WorkshopOpenSCAD Workshop
OpenSCAD WorkshopJustin Lin
2.1K views56 slides
Python Programming Essentials - M22 - File Operations by
Python Programming Essentials - M22 - File OperationsPython Programming Essentials - M22 - File Operations
Python Programming Essentials - M22 - File OperationsP3 InfoTech Solutions Pvt. Ltd.
1.5K views26 slides

Viewers also liked(17)

例外處理 by Justin Lin
例外處理例外處理
例外處理
Justin Lin1.4K views
從模組到類別 by Justin Lin
從模組到類別從模組到類別
從模組到類別
Justin Lin1.7K views
資料結構 by Justin Lin
資料結構資料結構
資料結構
Justin Lin1.8K views
網站系統安全及資料保護設計認知 by Justin Lin
網站系統安全及資料保護設計認知網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知
Justin Lin3.8K views
OpenSCAD Workshop by Justin Lin
OpenSCAD WorkshopOpenSCAD Workshop
OpenSCAD Workshop
Justin Lin2.1K views
除錯、測試與效能 by Justin Lin
除錯、測試與效能除錯、測試與效能
除錯、測試與效能
Justin Lin1.7K views
Python 3 Programming Language by Tahani Al-Manie
Python 3 Programming LanguagePython 3 Programming Language
Python 3 Programming Language
Tahani Al-Manie11.5K views
類別的繼承 by Justin Lin
類別的繼承類別的繼承
類別的繼承
Justin Lin1.4K views
資料永續與交換 by Justin Lin
資料永續與交換資料永續與交換
資料永續與交換
Justin Lin1.8K views
PyCon Taiwan 2013 Tutorial by Justin Lin
PyCon Taiwan 2013 TutorialPyCon Taiwan 2013 Tutorial
PyCon Taiwan 2013 Tutorial
Justin Lin290.9K views
3D 之邏輯與美感交會 - OpenSCAD by Justin Lin
3D 之邏輯與美感交會 - OpenSCAD3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD
Justin Lin1.4K views
常用內建模組 by Justin Lin
常用內建模組常用內建模組
常用內建模組
Justin Lin1.4K views
初學R語言的60分鐘 by Chen-Pan Liao
初學R語言的60分鐘初學R語言的60分鐘
初學R語言的60分鐘
Chen-Pan Liao139.8K views

Similar to open() 與 io 模組

TQC+ 程式語言 Python 09:檔案處理 by
TQC+ 程式語言 Python 09:檔案處理TQC+ 程式語言 Python 09:檔案處理
TQC+ 程式語言 Python 09:檔案處理neochen2701
1.2K views30 slides
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出 by
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Justin Lin
2.2K views48 slides
07 Structure, File.pdf by
07 Structure, File.pdf07 Structure, File.pdf
07 Structure, File.pdfJTLai1
14 views33 slides
輸入輸出 by
輸入輸出輸入輸出
輸入輸出Justin Lin
579 views48 slides
Java SE 8 技術手冊第 10 章 - 輸入輸出 by
Java SE 8 技術手冊第 10 章 - 輸入輸出Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出Justin Lin
2.6K views48 slides
Java_05:檔案輸出輸入機制 by
Java_05:檔案輸出輸入機制Java_05:檔案輸出輸入機制
Java_05:檔案輸出輸入機制Brad Chao
400 views24 slides

Similar to open() 與 io 模組(7)

TQC+ 程式語言 Python 09:檔案處理 by neochen2701
TQC+ 程式語言 Python 09:檔案處理TQC+ 程式語言 Python 09:檔案處理
TQC+ 程式語言 Python 09:檔案處理
neochen27011.2K views
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出 by Justin Lin
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Justin Lin2.2K views
07 Structure, File.pdf by JTLai1
07 Structure, File.pdf07 Structure, File.pdf
07 Structure, File.pdf
JTLai114 views
輸入輸出 by Justin Lin
輸入輸出輸入輸出
輸入輸出
Justin Lin579 views
Java SE 8 技術手冊第 10 章 - 輸入輸出 by Justin Lin
Java SE 8 技術手冊第 10 章 - 輸入輸出Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出
Justin Lin2.6K views
Java_05:檔案輸出輸入機制 by Brad Chao
Java_05:檔案輸出輸入機制Java_05:檔案輸出輸入機制
Java_05:檔案輸出輸入機制
Brad Chao400 views
Learn python 2 - Real World Case by Chia-Hao Tsai
Learn python 2 - Real World CaseLearn python 2 - Real World Case
Learn python 2 - Real World Case
Chia-Hao Tsai465 views

More from Justin Lin

Ch14 簡介 Spring Boot by
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
872 views22 slides
Ch13 整合 Spring MVC/Security by
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityJustin Lin
280 views58 slides
Ch12 Spring 起步走 by
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
274 views31 slides
Ch11 簡介 JavaMail by
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
157 views8 slides
Ch10 Web 容器安全管理 by
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
153 views30 slides
Ch09 整合資料庫 by
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫Justin Lin
233 views92 slides

More from Justin Lin(20)

Ch14 簡介 Spring Boot by Justin Lin
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin872 views
Ch13 整合 Spring MVC/Security by Justin Lin
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin280 views
Ch12 Spring 起步走 by Justin Lin
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin274 views
Ch11 簡介 JavaMail by Justin Lin
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin157 views
Ch10 Web 容器安全管理 by Justin Lin
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin153 views
Ch09 整合資料庫 by Justin Lin
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin233 views
Ch08 自訂標籤 by Justin Lin
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin133 views
Ch07 使用 JSTL by Justin Lin
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
Justin Lin161 views
Ch06 使用 JSP by Justin Lin
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
Justin Lin250 views
Ch05 Servlet 進階 API、過濾器與傾聽器 by Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin204 views
Ch04 會話管理 by Justin Lin
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
Justin Lin238 views
Ch03 請求與回應 by Justin Lin
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
Justin Lin236 views
Ch02 撰寫與設定 Servlet by Justin Lin
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin352 views
CH1. 簡介 Web 應用程式 by Justin Lin
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin1.2K views
14. 進階主題 by Justin Lin
14. 進階主題14. 進階主題
14. 進階主題
Justin Lin406 views
13.並行、平行與非同步 by Justin Lin
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
Justin Lin238 views
12. 除錯、測試與效能 by Justin Lin
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin153 views
11. 常用內建模組 by Justin Lin
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
Justin Lin149 views
10. 資料永續與交換 by Justin Lin
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
Justin Lin156 views
9. 資料結構 by Justin Lin
9. 資料結構9. 資料結構
9. 資料結構
Justin Lin292 views

open() 與 io 模組