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

Python 檔案操作:writelines() 方法批量寫入字串序列完整教學

     編輯:更多程式設計知識

writelines() 方法將字串序列(列表、元組、產生器等可迭代物件)一次寫入檔案。與 write() 不同,它不自動添加換行符,每個元素需自行包含 \n。適合批量寫入已格式化好的行資料。

語法


fileObject.writelines(sequence)
  • sequence:任何可迭代物件,產出字串(或位元組)。
  • 無回傳值(Python 3 回傳 None)。

範例 1:寫入列表


lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
with open('foo.txt', 'w') as f:
    f.writelines(lines)

範例 2:產生器表達式即時產出


with open('numbers.txt', 'w') as f:
    f.writelines(f'{i}\n' for i in range(100))  # 寫入 0-99,無需建立完整列表

範例 3:配合 seek 從末尾追加多行


with open('foo.txt', 'r+') as f:
    f.seek(0, 2)  # 移至末尾
    f.writelines(['Line 6\n', 'Line 7\n'])

完整示範腳本


#!/usr/bin/python
with open('foo.txt', 'w+') as f:
    print("Name:", f.name)
    # 初始 5 行
    for i in range(1, 6):
        f.write(f'Line {i}\n')

    # 批量追加 2 行
    seq = ['Line 6\n', 'Line 7\n']
    f.seek(0, 2)
    f.writelines(seq)

    # 從頭讀回驗證
    f.seek(0)
    for i, line in enumerate(f):
        print(f"Line No {i} - {line.rstrip()}")

# 輸出:
# Name: foo.txt
# Line No 0 - Line 1
# Line No 1 - Line 2
# Line No 2 - Line 3
# Line No 3 - Line 4
# Line No 4 - Line 5
# Line No 5 - Line 6
# Line No 6 - Line 7

關鍵差異:write() vs writelines()

特性write(str)writelines(seq)
參數型別單一字串字串可迭代物件
自動換行否否
記憶體效率單次寫入可配合產生器流式寫入
適用場景零散寫入、格式化字串已備妥行列表、大量資料流式輸出

常見錯誤


# 錯誤:以為 writelines 會自動加換行
f.writelines(['a', 'b', 'c'])  # 檔案內容變成 'abc',非三行

# 正確:元素自帶換行
f.writelines(['a\n', 'b\n', 'c\n'])
# 或
f.write('\n'.join(['a','b','c']) + '\n')

進階用法:大檔案分塊寫入


def chunked_write(filepath, data_iter, chunk_size=8192):
    """將大量資料分塊寫入,避免記憶體暴漲"""
    with open(filepath, 'w') as f:
        buffer = []
        for line in data_iter:
            buffer.append(line)
            if len(buffer) >= chunk_size:
                f.writelines(buffer)
                buffer.clear()
        if buffer:
            f.writelines(buffer)

總結

writelines() 是批量寫入多行字串的高效方法,核心要點:元素需自帶換行符、支援任意可迭代物件(含產生器)、無回傳值。配合 seek() 可實現檔案任意位置的批量插入/覆寫。

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