
- Python 資料持久化教程
- Python 資料持久化 - 首頁
- Python 資料持久化 - 簡介
- Python 資料持久化 - 檔案 API
- 使用 os 模組進行檔案處理
- Python 資料持久化 - 物件序列化
- Python 資料持久化 - Pickle 模組
- Python 資料持久化 - Marshal 模組
- Python 資料持久化 - Shelve 模組
- Python 資料持久化 - dbm 包
- Python 資料持久化 - CSV 模組
- Python 資料持久化 - JSON 模組
- Python 資料持久化 - XML 解析器
- Python 資料持久化 - Plistlib 模組
- Python 資料持久化 - Sqlite3 模組
- Python 資料持久化 - SQLAlchemy
- Python 資料持久化 - PyMongo 模組
- Python 資料持久化 - Cassandra 驅動程式
- 資料持久化 - ZODB
- 資料持久化 - Openpyxl 模組
- Python 資料持久化資源
- Python 資料持久化 - 快速指南
- Python 資料持久化 - 有用資源
- Python 資料持久化 - 討論
Python 資料持久化 - 檔案 API
Python 使用內建的 input() 和 print() 函式執行標準輸入/輸出操作。input() 函式從標準輸入流裝置(即鍵盤)讀取位元組。
另一方面,print() 函式將資料傳送到標準輸出流裝置(即顯示器)。Python 程式透過 sys 模組中定義的標準流物件 stdin 和 stdout 與這些 I/O 裝置互動。
input() 函式實際上是 sys.stdin 物件的 readline() 方法的包裝器。從輸入流接收所有按鍵,直到按下“Enter”鍵。
>>> import sys >>> x=sys.stdin.readline() Welcome to TutorialsPoint >>> x 'Welcome to TutorialsPoint\n'
請注意,readline() 函式留下尾隨的“\n”字元。還有一個 read() 方法,它從標準輸入流讀取資料,直到它被Ctrl+D 字元終止。
>>> x=sys.stdin.read() Hello Welcome to TutorialsPoint >>> x 'Hello\nWelcome to TutorialsPoint\n'
類似地,print() 是一個模擬 stdout 物件的 write() 方法的便捷函式。
>>> x='Welcome to TutorialsPoint\n' >>> sys.stdout.write(x) Welcome to TutorialsPoint 26
就像 stdin 和 stdout 預定義的流物件一樣,Python 程式可以從磁碟檔案或網路套接字讀取資料並向其傳送資料。它們也是流。任何具有 read() 方法的物件都是輸入流。任何具有 write() 方法的物件都是輸出流。透過使用內建的 open() 函式獲取對流物件的引用來建立與流的通訊。
open() 函式
此內建函式使用以下引數:
f=open(name, mode, buffering)
name 引數是磁碟檔名或位元組字串,mode 是可選的單字元字串,用於指定要執行的操作型別(讀取、寫入、追加等),buffering 引數為 0、1 或 -1,分別表示緩衝區關閉、開啟或系統預設。
檔案開啟模式根據下表列舉。預設模式為“r”
序號 | 引數和描述 |
---|---|
1 |
R 開啟以進行讀取(預設) |
2 |
W 開啟以進行寫入,首先截斷檔案 |
3 |
X 建立一個新檔案並將其開啟以進行寫入 |
4 |
A 開啟以進行寫入,如果檔案存在則追加到檔案末尾 |
5 |
B 二進位制模式 |
6 |
T 文字模式(預設) |
7 |
+ 開啟磁碟檔案以進行更新(讀取和寫入) |
為了將資料儲存到檔案,必須以“w”模式開啟它。
f=open('test.txt','w')
此檔案物件充當輸出流,並可以訪問 write() 方法。write() 方法將字串傳送到此物件,並將其儲存在底層檔案中。
string="Hello TutorialsPoint\n" f.write(string)
關閉流非常重要,以確保緩衝區中剩餘的任何資料都完全傳輸到流中。
file.close()
嘗試使用任何文字編輯器(例如記事本)開啟“test.txt”以確認檔案的成功建立。
要以程式設計方式讀取“test.txt”的內容,必須以“r”模式開啟它。
f=open('test.txt','r')
此物件充當輸入流。Python 可以使用read() 方法從流中獲取資料。
string=f.read() print (string)
檔案內容顯示在 Python 控制檯上。File 物件還支援readline() 方法,該方法能夠讀取字串,直到遇到 EOF 字元。
但是,如果以“w”模式開啟相同的檔案以在其記憶體儲其他文字,則先前的內容將被擦除。每當以寫入許可權開啟檔案時,它都被視為新檔案。要向現有檔案新增資料,請使用“a”表示追加模式。
f=open('test.txt','a') f.write('Python Tutorials\n')
現在,檔案包含先前以及新新增的字串。檔案物件還支援writelines() 方法,將列表物件中的每個字串寫入檔案。
f=open('test.txt','a') lines=['Java Tutorials\n', 'DBMS tutorials\n', 'Mobile development tutorials\n'] f.writelines(lines) f.close()
示例
readlines() 方法返回一個字串列表,每個字串代表檔案中的每一行。也可以逐行讀取檔案,直到到達檔案末尾。
f=open('test.txt','r') while True: line=f.readline() if line=='' : break print (line, end='') f.close()
輸出
Hello TutorialsPoint Python Tutorials Java Tutorials DBMS tutorials Mobile development tutorials
二進位制模式
預設情況下,對檔案物件的讀取/寫入操作是對文字字串資料執行的。如果我們想要處理不同其他型別的檔案,例如媒體 (mp3)、可執行檔案 (exe)、圖片 (jpg) 等,我們需要在讀取/寫入模式中新增“b”字首。
以下語句將字串轉換為位元組並寫入檔案。
f=open('test.bin', 'wb') data=b"Hello World" f.write(data) f.close()
也可以使用 encode() 函式將文字字串轉換為位元組。
data="Hello World".encode('utf-8')
我們需要使用“rb” 模式來讀取二進位制檔案。在列印之前,首先對 read() 方法的返回值進行解碼。
f=open('test.bin', 'rb') data=f.read() print (data.decode(encoding='utf-8'))
為了將整數資料寫入二進位制檔案,應使用to_bytes() 方法將整數物件轉換為位元組。
n=25 n.to_bytes(8,'big') f=open('test.bin', 'wb') data=n.to_bytes(8,'big') f.write(data)
要從二進位制檔案讀回資料,請使用 from_bytes() 函式將 read() 函式的輸出轉換為整數。
f=open('test.bin', 'rb') data=f.read() n=int.from_bytes(data, 'big') print (n)
對於浮點數資料,我們需要使用 Python 標準庫中的struct 模組。
import struct x=23.50 data=struct.pack('f',x) f=open('test.bin', 'wb') f.write(data)
解包 read() 函式的字串,以從二進位制檔案中檢索浮點數資料。
f=open('test.bin', 'rb') data=f.read() x=struct.unpack('f', data) print (x)
同時讀取/寫入
當檔案以寫入方式開啟(使用“w”或“a”)時,無法從中讀取,反之亦然。這樣做會引發 UnSupportedOperation 錯誤。我們需要在執行其他操作之前關閉檔案。
為了同時執行這兩個操作,我們必須在 mode 引數中新增“+”字元。因此,“w+”或“r+”模式允許使用 write() 和 read() 方法而無需關閉檔案。File 物件還支援 seek() 函式,可以將流倒帶到任何所需的位元組位置。
f=open('test.txt','w+') f.write('Hello world') f.seek(0,0) data=f.read() print (data) f.close()
下表總結了檔案式物件可用的所有方法。
序號 | 方法和描述 |
---|---|
1 |
close() 關閉檔案。關閉的檔案無法再讀取或寫入。 |
2 |
flush() 重新整理內部緩衝區。 |
3 |
fileno() 返回整數檔案描述符。 |
4 |
next() 每次呼叫時返回檔案中的下一行。在 Python 3 中使用 next() 迭代器。 |
5 |
read([size]) 從檔案中讀取最多 size 個位元組(如果讀取在獲取 size 個位元組之前遇到 EOF,則位元組數更少)。 |
6 |
readline([size]) 從檔案中讀取一整行。尾隨換行符保留在字串中。 |
7 |
readlines([sizehint]) 使用 readline() 讀取直到 EOF 並返回包含行的列表。 |
8 |
seek(offset[, whence]) 設定檔案的當前位置。0-開頭 1-當前 2-結尾。 |
9 |
seek(offset[, whence]) 設定檔案的當前位置。0-開頭 1-當前 2-結尾。 |
10 |
tell() 返回檔案的當前位置 |
11 |
truncate([size]) 截斷檔案的大小。 |
12 |
write(str) 將字串寫入檔案。沒有返回值。 |