首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 文件操作基礎:read() 方法完整使用指南與範例

     編輯:更多程式設計知識

在 Python 中處理文件時,read() 是最基礎也最常用的讀取方法。它能一次性讀取指定位元組數的內容,或讀取整個文件。本文詳細說明 read() 的語法、參數、回傳值與實戰範例,並補充常見陷阱與最佳實務。

方法語法與參數

file_object.read(size=-1)
參數說明
size (可選)要讀取的位元組數 (整數)。預設 -1 表示讀取至 EOF (整個文件)。

回傳值

  • 字串 (文字模式) 或 bytes (二進位模式),包含讀取到的內容。
  • 若已在 EOF,回傳空字串 '' 或 b''。

基本範例

# 文字模式讀取
with open('foo.txt', 'r', encoding='utf-8') as f:
    content = f.read(10)      # 讀取前 10 個字元
    print(f'讀取內容: {content}')
    print(f'目前位置: {f.tell()}')  # 10
    
    remaining = f.read()      # 讀取剩餘全部
    print(f'剩餘內容: {remaining}')

進階用法與情境

1. 分塊讀取大文件 (避免記憶體爆炸)

CHUNK_SIZE = 8192  # 8KB
with open('large_log.txt', 'r', encoding='utf-8') as f:
    while True:
        chunk = f.read(CHUNK_SIZE)
        if not chunk:
            break
        process_chunk(chunk)  # 處理每一塊

2. 二進位模式讀取圖片/影音

with open('image.png', 'rb') as f:
    header = f.read(8)  # 讀取 PNG 簽名: 89 50 4E 47 0D 0A 1A 0A
    print(header.hex())  # 89504e470d0a1a0a

3. 配合 seek() 隨機存取

with open('data.bin', 'rb') as f:
    f.seek(100)        # 移動到第 100 位元組
    data = f.read(50)  # 讀取 100-149 位元組

常見陷阱與注意事項

問題原因解決方案
讀取中文亂碼未指定 encoding,預設使用平台編碼 (Windows cp950)明確指定 encoding='utf-8' 或 'utf-8-sig' (含 BOM)
read() 回傳空字串游標已在 EOF檢查是否已讀取完畢,或用 seek(0) 重置
大文件記憶體不足一次 read() 整個 GB 級文件使用分塊讀取或 mmap 模組
Windows 換行符 \r\n 問題文字模式預設會轉換 \r\n → \n二進位模式 'rb' 保持原始位元組,或用 newline='' 關閉轉換

read() vs readline() vs readlines()

方法用途記憶體效率
read(size)任意位元組讀取、二進位、大文件分塊高 (可控制塊大小)
readline()逐行讀取文字文件高 (逐行處理)
readlines()一次讀取所有行成列表低 (全載入記憶體)

最佳實務總結

  1. 永遠使用 with 陳述式:自動關閉文件,即使發生例外也能釋放資源。
  2. 明確指定 encoding:open('file.txt', 'r', encoding='utf-8')。
  3. 大文件分塊讀取:設定合理的 CHUNK_SIZE (4KB-64KB)。
  4. 二進位檔用 'rb'/'wb':避免換行符轉換破壞資料。
  5. 配合 tell()/seek() 實現隨機存取與斷點續傳邏輯。

熟練掌握 read() 及其變體,是 Python 文件處理能力的基石,無論是日誌分析、資料管線、網路協定解析,都離不開這項核心技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved