欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中StringIO和BytesIO用法及區(qū)別

 更新時(shí)間:2025年08月12日 09:44:14   作者:余子越  
我們平時(shí)處理的輸入輸出(I/O)大多數(shù)是針對(duì)文件或網(wǎng)絡(luò)數(shù)據(jù)的,但有時(shí)候,我們希望直接在內(nèi)存中進(jìn)行讀寫,而不必先把數(shù)據(jù)存到硬盤上, StringIO和BytesIO 就派上用場(chǎng),下面就來介紹一下兩者的用法和區(qū)別小結(jié)

在 Python 中,我們平時(shí)處理的輸入輸出(I/O)大多數(shù)是針對(duì)文件或網(wǎng)絡(luò)數(shù)據(jù)的,但有時(shí)候,我們希望直接在內(nèi)存中進(jìn)行讀寫,而不必先把數(shù)據(jù)存到硬盤上。
這時(shí)候,StringIOBytesIO 就派上用場(chǎng)了。

簡(jiǎn)單理解:

  • StringIO → 操作內(nèi)存中的 字符串str 類型)
  • BytesIO → 操作內(nèi)存中的 二進(jìn)制數(shù)據(jù)bytes 類型)

它們都來自 io 模塊,接口和文件對(duì)象幾乎一模一樣,所以學(xué)會(huì)文件操作就能直接用它們。

1. 為什么要用 StringIO / BytesIO

  • 無需磁盤 I/O,速度快
  • 便于測(cè)試(不需要真實(shí)文件)
  • 在網(wǎng)絡(luò)編程中常用(比如 HTTP 響應(yīng)先存在內(nèi)存中再處理)
  • 數(shù)據(jù)臨時(shí)存儲(chǔ)(比如生成報(bào)告、圖片)

2. StringIO 基礎(chǔ)用法

StringIO 適合處理 文本數(shù)據(jù),使用方式類似普通文件:

from io import StringIO

# 創(chuàng)建 StringIO 對(duì)象
f = StringIO()

# 寫入數(shù)據(jù)
f.write("Hello ")
f.write("Python")

# 獲取當(dāng)前內(nèi)容
print(f.getvalue())  # Hello Python

注意:getvalue() 用來獲取緩沖區(qū)的全部數(shù)據(jù)。

3. StringIO 讀取數(shù)據(jù)

我們也可以直接用 StringIO 來模擬讀取文件:

from io import StringIO

data = "Line1\nLine2\nLine3"
f = StringIO(data)

# 一次性讀取
print(f.read())

# 重置游標(biāo)
f.seek(0)

# 按行讀取
for line in f:
    print(line.strip())

要點(diǎn):

  • seek(0) → 把“文件指針”移動(dòng)到開頭
  • 讀取方法(read、readline、readlines)和文件對(duì)象一致

4. BytesIO 基礎(chǔ)用法

BytesIO 用于處理 二進(jìn)制數(shù)據(jù),比如圖片、音頻、壓縮包等。

from io import BytesIO

# 創(chuàng)建 BytesIO
f = BytesIO()

# 寫入二進(jìn)制數(shù)據(jù)
f.write(b"Hello World")

# 獲取數(shù)據(jù)
print(f.getvalue())  # b'Hello World'

5. BytesIO 讀取數(shù)據(jù)

from io import BytesIO

data = b"Binary\x00Data"
f = BytesIO(data)

# 讀取前6個(gè)字節(jié)
print(f.read(6))  # b'Binary'

# 繼續(xù)讀剩下的
print(f.read())   # b'\x00Data'

6. StringIO vs BytesIO 區(qū)別

特性StringIOBytesIO
處理數(shù)據(jù)類型str(文本)bytes(二進(jìn)制)
讀取寫入方式和文本文件一致和二進(jìn)制文件一致
編碼解碼不需要手動(dòng)編碼需要自己 .encode() / .decode()
常見應(yīng)用日志處理、臨時(shí)文本圖片、音頻、網(wǎng)絡(luò)傳輸數(shù)據(jù)

7. 從文件到內(nèi)存的轉(zhuǎn)換

有時(shí)我們需要把磁盤文件內(nèi)容讀到內(nèi)存中用 BytesIO 處理,比如處理圖片:

from io import BytesIO

# 假設(shè)有個(gè)圖片
with open("test.png", "rb") as f:
    data = f.read()

# 存入 BytesIO
bio = BytesIO(data)

# 讀取前10個(gè)字節(jié)
print(bio.read(10))

8. 從內(nèi)存保存到文件

反過來,我們也可以把 BytesIOStringIO 的數(shù)據(jù)寫到磁盤:

from io import BytesIO

# 創(chuàng)建內(nèi)存數(shù)據(jù)
bio = BytesIO()
bio.write(b"Save me to file")

# 寫入文件
with open("output.bin", "wb") as f:
    f.write(bio.getvalue())

9. 常見使用場(chǎng)景

  1. 臨時(shí)構(gòu)建數(shù)據(jù),避免磁盤 I/O
  2. 測(cè)試代碼時(shí),模擬文件對(duì)象
  3. 網(wǎng)絡(luò)數(shù)據(jù)處理(HTTP 請(qǐng)求、Socket 傳輸)
  4. 圖片或音頻處理(配合 Pillow、pydub 等庫(kù))

10. 最佳實(shí)踐

  • 如果處理的是文本,用 StringIO,并且直接寫 str 類型。
  • 如果處理的是二進(jìn)制數(shù)據(jù)(比如圖片、壓縮包),用 BytesIO,并且確保寫入的是 bytes。
  • 操作完成后不一定非要 close()(因?yàn)樗鼈兪莾?nèi)存對(duì)象),但為了習(xí)慣最好加上。
  • 需要頻繁讀取時(shí),記得用 seek(0) 重置指針。

到此這篇關(guān)于Python中StringIO和BytesIO用法及區(qū)別的文章就介紹到這了,更多相關(guān)Python StringIO BytesIO內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • python 繪制場(chǎng)景熱力圖的示例

    python 繪制場(chǎng)景熱力圖的示例

    這篇文章主要介紹了python 繪制場(chǎng)景熱力圖的示例,幫助大家更好的利用python繪制圖像,感興趣的朋友可以了解下
    2020-09-09
  • Python中定時(shí)任務(wù)框架APScheduler的快速入門指南

    Python中定時(shí)任務(wù)框架APScheduler的快速入門指南

    APScheduler是基于Quartz的一個(gè)Python定時(shí)任務(wù)框架,實(shí)現(xiàn)了Quartz的所有功能,使用起來十分方便。下面這篇文章主要跟大家介紹了Python中定時(shí)任務(wù)框架APScheduler的快速入門指南,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • python3使用SMTP發(fā)送簡(jiǎn)單文本郵件

    python3使用SMTP發(fā)送簡(jiǎn)單文本郵件

    這篇文章主要為大家詳細(xì)介紹了python3使用SMTP發(fā)送簡(jiǎn)單文本郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python基于paramiko庫(kù)操作遠(yuǎn)程服務(wù)器的實(shí)現(xiàn)

    Python基于paramiko庫(kù)操作遠(yuǎn)程服務(wù)器的實(shí)現(xiàn)

    本文主要介紹了使用Python的Paramiko庫(kù)來操作遠(yuǎn)程服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Python如何實(shí)現(xiàn)游戲中的推送通知與消息

    Python如何實(shí)現(xiàn)游戲中的推送通知與消息

    文章介紹了如何使用Python構(gòu)建高效的游戲消息推送系統(tǒng),包括使用異步IO和事件驅(qū)動(dòng)編程,以及與Redis、WebSocket等技術(shù)的結(jié)合,文章還強(qiáng)調(diào)了安全性和用戶體驗(yàn)的重要性,并提供了性能優(yōu)化的建議
    2025-01-01
  • Python?列表中的刪除操作之del、remove?和?pop?的區(qū)別

    Python?列表中的刪除操作之del、remove?和?pop?的區(qū)別

    在Python中,列表(list)是一種非常靈活的數(shù)據(jù)結(jié)構(gòu),它允許我們存儲(chǔ)一系列的元素,在刪除元素時(shí),我們可以使用三種不同的方法:del、remove?和?pop,每種方法都有其特定的用途和行為,了解它們的區(qū)別可以幫助我們更有效地使用列表,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • Python獲取文件夾下所有文件的方法教程

    Python獲取文件夾下所有文件的方法教程

    使用Python獲取文件夾下所有文件可采用os模塊或pathlib模塊,os模塊通過os.listdir和os.walk方法實(shí)現(xiàn)文件遍歷,而pathlib模塊通過Path類和其iterdir與rglob方法實(shí)現(xiàn),兩種方法各有優(yōu)勢(shì),可根據(jù)具體需求選擇使用,需要的朋友可以參考下
    2024-11-11
  • python操作gitlab API過程解析

    python操作gitlab API過程解析

    這篇文章主要介紹了python操作gitlab API過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 基于Python開發(fā)圖片文件信息統(tǒng)計(jì)工具

    基于Python開發(fā)圖片文件信息統(tǒng)計(jì)工具

    這篇文章主要為大家詳細(xì)介紹了如何開發(fā)一個(gè)基于Python的圖形化工具,幫助用戶快速統(tǒng)計(jì)文件夾中所有圖片的詳細(xì)信息并導(dǎo)出到Excel文件中,有需要的小伙伴可以了解下
    2025-05-05
  • Python-tkinter模塊中pack使用解讀

    Python-tkinter模塊中pack使用解讀

    文章介紹了Python的tkinter模塊中的pack布局管理器,詳細(xì)說明了pack函數(shù)的語(yǔ)法、參數(shù)及其用途,并提供了一個(gè)示例代碼來演示如何使用pack布局管理器來控制組件的布局
    2024-11-11

最新評(píng)論