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

Python 文件逐行讀取:readline() 方法完整解析與實戰技巧

     編輯:更多程式設計知識

readline() 是 Python 文件物件專門用於「逐行讀取」的方法。它每次呼叫只回傳一行 (含結尾換行符),極適合處理大型文字文件、日誌分析、CSV 解析等逐行處理情境。本文詳細說明語法、參數、回傳值與豐富實戰範例。

方法語法與參數

file_object.readline(size=-1)
參數說明
size (可選)最大讀取位元組數。若指定,可能回傳不完整行 (截斷於 size 限制)。預設 -1 讀取完整行。

回傳值特性

  • 包含結尾換行符 \n (最後一行若無換行則不含)。
  • 遇到 EOF 回傳空字串 '' (可作為迴圈終止條件)。
  • 文字模式回傳 str,二進位模式回傳 bytes。

核心範例

1. 標準逐行處理迴圈 (推薦寫法)

with open('access.log', 'r', encoding='utf-8') as f:
    for line in f:           # 文件物件本身可迭代,自動逐行
        line = line.rstrip('\n')  # 移除結尾換行符
        if 'ERROR' in line:
            print(f'錯誤行: {line}')

2. 手動呼叫 readline() 迴圈

with open('data.txt', 'r') as f:
    while True:
        line = f.readline()
        if not line:         # EOF 回傳空字串
            break
        print(f'行號 {f.tell()}: {line}', end='')

3. 限制讀取長度 (size 參數)

with open('huge_line.txt', 'r') as f:
    # 只讀取前 100 字元,避免單行過長佔滿記憶體
    partial = f.readline(100)
    print(f'前100字元: {partial}')

進階實戰技巧

逐行處理超大文件 (記憶體友善)

def process_large_file(filepath, chunk_lines=10000):
    '''生成器:分批次產出行列表,適合批次寫入資料庫'''
    batch = []
    with open(filepath, 'r', encoding='utf-8') as f:
        for line in f:
            batch.append(line.rstrip('\n'))
            if len(batch) >= chunk_lines:
                yield batch
                batch = []
        if batch:
            yield batch

# 使用範例
for batch in process_large_file('huge.csv'):
    db.bulk_insert(batch)
    print(f'已寫入 {len(batch)} 筆')

跳過標題行 / 特定前綴行

with open('data.csv', 'r') as f:
    header = f.readline()  # 讀取並捨棄第一行
    print(f'欄位: {header.strip()}')
    
    for line in f:
        if line.startswith('#'):  # 跳過註解行
            continue
        process_data(line)

配合 enumerate() 取得行號

with open('config.ini', 'r') as f:
    for lineno, line in enumerate(f, 1):
        line = line.strip()
        if line and not line.startswith(';'):
            print(f'{lineno:4d}: {line}')

readline() vs readlines() vs for 迴圈

方式記憶體速度適用場景
for line in fO(1)快最通用、Pythonic、自動處理迭代器協定
f.readline()O(1)快需精確控制讀取邏輯 (如狀態機解析)
f.readlines()O(N)中小文件需隨機存取行、或一次性載入列表

常見坑點

  • 保留換行符:readline() 保留 \n,處理前記得 .rstrip('\n') 或 .strip()。
  • 空行 vs EOF:空行回傳 '\n' (真值),EOF 回傳 '' (假值),if not line: 正確判斷 EOF。
  • 通用換行符:Python 3 文字模式自動將 \r\n、\r 統一轉為 \n,跨平台無憂。

最佳實務建議

  1. 優先使用 for line in f: 簡潔迭代。
  2. 需手動控制時才用 readline()。
  3. 大文件絕對不要用 readlines()。
  4. 指定 encoding='utf-8' 避免編碼問題。
  5. 配合 with 確保資源釋放。

readline() 是 Python 文件處理的基石之一,掌握其行導向特性與生成器模式,能輕鬆應對 TB 級日誌分析、流式資料處理等高階場景。

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