truncate() 方法用於縮減檔案大小至指定位元組數,或截斷至目前檔案指標位置。常用於清空檔案內容、保留檔案前段資料、實作日誌輪轉等場景。
fileObject.truncate([size])
size(可選):截斷後的檔案大小(位元組)。預設為目前檔案指標位置(tell() 回傳值)。size 大於目前檔案大小,行為平台相關(可能擴充檔案並填充零位元組,或不變)。IOError。無回傳值(None)。
with open('log.txt', 'r+') as f:
f.truncate(0) # 將檔案大小設為 0,內容清空
# 檔案指標仍在 0 位置
with open('data.bin', 'r+b') as f:
f.seek(100)
f.truncate() # 截斷至第 100 位元組
#!/usr/bin/python
# 建立測試檔案
with open('foo.txt', 'w') as f:
f.write('Line 1\nLine 2\nLine 3\nLine 4\nLine 5\n')
# 示範 truncate 行為
with open('foo.txt', 'r+') as f:
print("Name:", f.name)
line = f.readline()
print("Read Line:", line.rstrip()) # Line 1
# 截斷剩餘內容(從目前指標位置截斷)
f.truncate()
# 嘗試再讀取
line = f.readline()
print("Read after truncate:", repr(line)) # 空字串 ''
# 輸出結果:
# Name: foo.txt
# Read Line: Line 1
# Read after truncate: ''
truncate() 不會移動檔案指標,截斷後指標保持原位(可能已超過新檔案末尾,下次讀取回傳空字串)。f.seek(0)。'r+') 下,size 單位為位元組,非字元數,中文編碼需注意。truncate 擴充檔案可能不支援,Linux/Unix 通常支援稀疏檔案擴充。truncate(0) 清空並重寫。seek(0)、truncate()、寫入新資料,確保無殘留舊資料。truncate() 是檔案大小控制的核心方法,配合 seek()/tell() 可實現精準的檔案內容截斷與重寫。記住:預設截斷至目前指標位置,唯讀模式不可用,跨平台擴充行為有差異。