SlideShare a Scribd company logo
1 of 40
Download to read offline
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')
• 逐行讀取檔案內容
• 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() 函式基於該檔案描述器建立檔案物件,
以便進行檔案操作。
認識 io 模組
• open() 函式實際上是個工廠函式
• 若想進一步掌握檔案物件的操作,就得認
識 io 模組
• 檔案物件大致上分為三個主要類型
– 文字(Text)I/O
– 二進位(Binary)I/O
– 原始(Raw)I/O
• 原始 I/O 是無緩衝低階操作,少直接使用,
常作為文字 I/O 或二進位 I/O 底層操作
• TextIOWrapper 也是個包裹器,可以包
裹 BufferedIOBase,以便將二進位資料
依指定的文字編碼進行轉換
• 如果資料的讀取來源或寫入目的地,並不
是個檔案,而想要是記憶體中某個物件,
那麼可以使用 BytesIO 或 StringIO
• 通常使用 BytesIO 時,最後會使用
getvalue() 方法來取得寫入的資料
• 若想讀寫的是文字資料,可以使用 StringIO

More Related Content

What's hot

流程語法與函式
流程語法與函式流程語法與函式
流程語法與函式Justin Lin
 
Python匯出入csv以及繪製圖表初稿
Python匯出入csv以及繪製圖表初稿Python匯出入csv以及繪製圖表初稿
Python匯出入csv以及繪製圖表初稿jiannrong
 
7. 例外處理
7. 例外處理7. 例外處理
7. 例外處理Justin Lin
 
4. 流程語法與函式
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式Justin Lin
 
流程語法與函式
流程語法與函式流程語法與函式
流程語法與函式Justin Lin
 
函数调用关系工具-2011-孙光福
函数调用关系工具-2011-孙光福函数调用关系工具-2011-孙光福
函数调用关系工具-2011-孙光福Wu Liang
 
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南HonestQiao
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組Justin Lin
 
open() 與 io 模組
open() 與 io 模組open() 與 io 模組
open() 與 io 模組Justin Lin
 
简单Pthon教程
简单Pthon教程简单Pthon教程
简单Pthon教程junjun chen
 
[系列活動] Python 程式語言起步走
[系列活動] Python 程式語言起步走[系列活動] Python 程式語言起步走
[系列活動] Python 程式語言起步走台灣資料科學年會
 
Python简明教程
Python简明教程Python简明教程
Python简明教程ingong
 
並行與平行
並行與平行並行與平行
並行與平行Justin Lin
 

What's hot (18)

流程語法與函式
流程語法與函式流程語法與函式
流程語法與函式
 
Python匯出入csv以及繪製圖表初稿
Python匯出入csv以及繪製圖表初稿Python匯出入csv以及繪製圖表初稿
Python匯出入csv以及繪製圖表初稿
 
7. 例外處理
7. 例外處理7. 例外處理
7. 例外處理
 
Py ladies 0928
Py ladies 0928Py ladies 0928
Py ladies 0928
 
Python系列3
Python系列3Python系列3
Python系列3
 
4. 流程語法與函式
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式
 
fork理解
fork理解fork理解
fork理解
 
Python系列4
Python系列4Python系列4
Python系列4
 
流程語法與函式
流程語法與函式流程語法與函式
流程語法與函式
 
函数调用关系工具-2011-孙光福
函数调用关系工具-2011-孙光福函数调用关系工具-2011-孙光福
函数调用关系工具-2011-孙光福
 
Python系列1
Python系列1Python系列1
Python系列1
 
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
 
open() 與 io 模組
open() 與 io 模組open() 與 io 模組
open() 與 io 模組
 
简单Pthon教程
简单Pthon教程简单Pthon教程
简单Pthon教程
 
[系列活動] Python 程式語言起步走
[系列活動] Python 程式語言起步走[系列活動] Python 程式語言起步走
[系列活動] Python 程式語言起步走
 
Python简明教程
Python简明教程Python简明教程
Python简明教程
 
並行與平行
並行與平行並行與平行
並行與平行
 

Viewers also liked

從模組到類別
從模組到類別從模組到類別
從模組到類別Justin Lin
 
網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知Justin Lin
 
OpenSCAD Workshop
OpenSCAD WorkshopOpenSCAD Workshop
OpenSCAD WorkshopJustin Lin
 
除錯、測試與效能
除錯、測試與效能除錯、測試與效能
除錯、測試與效能Justin Lin
 
Python 3 Programming Language
Python 3 Programming LanguagePython 3 Programming Language
Python 3 Programming LanguageTahani Al-Manie
 
Python Programming Essentials - M44 - Overview of Web Development
Python Programming Essentials - M44 - Overview of Web DevelopmentPython Programming Essentials - M44 - Overview of Web Development
Python Programming Essentials - M44 - Overview of Web DevelopmentP3 InfoTech Solutions Pvt. Ltd.
 
類別的繼承
類別的繼承類別的繼承
類別的繼承Justin Lin
 
資料永續與交換
資料永續與交換資料永續與交換
資料永續與交換Justin Lin
 
PyCon Taiwan 2013 Tutorial
PyCon Taiwan 2013 TutorialPyCon Taiwan 2013 Tutorial
PyCon Taiwan 2013 TutorialJustin Lin
 
3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCADJustin Lin
 
常用內建模組
常用內建模組常用內建模組
常用內建模組Justin Lin
 
初學R語言的60分鐘
初學R語言的60分鐘初學R語言的60分鐘
初學R語言的60分鐘Chen-Pan Liao
 

Viewers also liked (17)

例外處理
例外處理例外處理
例外處理
 
從模組到類別
從模組到類別從模組到類別
從模組到類別
 
資料結構
資料結構資料結構
資料結構
 
網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知
 
OpenSCAD Workshop
OpenSCAD WorkshopOpenSCAD Workshop
OpenSCAD Workshop
 
Python Programming Essentials - M22 - File Operations
Python Programming Essentials - M22 - File OperationsPython Programming Essentials - M22 - File Operations
Python Programming Essentials - M22 - File Operations
 
除錯、測試與效能
除錯、測試與效能除錯、測試與效能
除錯、測試與效能
 
Python 3 Programming Language
Python 3 Programming LanguagePython 3 Programming Language
Python 3 Programming Language
 
Python Programming Essentials - M44 - Overview of Web Development
Python Programming Essentials - M44 - Overview of Web DevelopmentPython Programming Essentials - M44 - Overview of Web Development
Python Programming Essentials - M44 - Overview of Web Development
 
類別的繼承
類別的繼承類別的繼承
類別的繼承
 
Python
PythonPython
Python
 
資料永續與交換
資料永續與交換資料永續與交換
資料永續與交換
 
PyCon Taiwan 2013 Tutorial
PyCon Taiwan 2013 TutorialPyCon Taiwan 2013 Tutorial
PyCon Taiwan 2013 Tutorial
 
3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD
 
常用內建模組
常用內建模組常用內建模組
常用內建模組
 
進階主題
進階主題進階主題
進階主題
 
初學R語言的60分鐘
初學R語言的60分鐘初學R語言的60分鐘
初學R語言的60分鐘
 

Similar to open() 與 io 模組

TQC+ 程式語言 Python 09:檔案處理
TQC+ 程式語言 Python 09:檔案處理TQC+ 程式語言 Python 09:檔案處理
TQC+ 程式語言 Python 09:檔案處理neochen2701
 
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Justin Lin
 
07 Structure, File.pdf
07 Structure, File.pdf07 Structure, File.pdf
07 Structure, File.pdfJTLai1
 
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出Justin Lin
 
Java_05:檔案輸出輸入機制
Java_05:檔案輸出輸入機制Java_05:檔案輸出輸入機制
Java_05:檔案輸出輸入機制Brad Chao
 
Learn python 2 - Real World Case
Learn python 2 - Real World CaseLearn python 2 - Real World Case
Learn python 2 - Real World CaseChia-Hao Tsai
 

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

TQC+ 程式語言 Python 09:檔案處理
TQC+ 程式語言 Python 09:檔案處理TQC+ 程式語言 Python 09:檔案處理
TQC+ 程式語言 Python 09:檔案處理
 
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
 
07 Structure, File.pdf
07 Structure, File.pdf07 Structure, File.pdf
07 Structure, File.pdf
 
輸入輸出
輸入輸出輸入輸出
輸入輸出
 
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出
 
Java_05:檔案輸出輸入機制
Java_05:檔案輸出輸入機制Java_05:檔案輸出輸入機制
Java_05:檔案輸出輸入機制
 
Learn python 2 - Real World Case
Learn python 2 - Real World CaseLearn python 2 - Real World Case
Learn python 2 - Real World Case
 

More from Justin Lin

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityJustin Lin
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫Justin Lin
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤Justin Lin
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTLJustin Lin
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSPJustin Lin
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Justin Lin
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理Justin Lin
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應Justin Lin
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletJustin Lin
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式Justin Lin
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題Justin Lin
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步Justin Lin
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能Justin Lin
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組Justin Lin
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換Justin Lin
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構Justin Lin
 

More from Justin Lin (20)

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

open() 與 io 模組