要將文件修剪到確定的大小,保持開始,您可以使用os.truncate
調用。
你沒有提到你是否想要在開頭或文件末尾修剪字節 - 但是從你的代碼中,推斷它是在開始。
在這種情況下,由於通常的truncate
調用在某些文件系統中可用來在最後剪切文件,所以需要做的是將數據從期望的位置寫入到開始文件。這樣做,僅僅是打開文件兩次一種緊湊的方法 - (在某些操作系統可能無法正常工作,只讀過DTA到一個臨時對象,並再次打開該文件書面方式,在這種情況下):
import os
def truncate_begining(path, length):
"""Remove length bytes at the beggning of given file"""
original_length = os.stat(path).st_size
with open(path, "r+b") as reading, open(path, "r+b") as writting:
reading.seek(length)
writting.write(reading.read())
try:
os.truncate(path, orginal_length - length)
except OSError as error:
print("Unable to truncate the file:", error)
請注意,truncate
功能在所有情況下都不可用,並且這取決於文件具有此功能的文件系統。如果它沒有,則調用truncate會引發錯誤。 (該文件說電話是在Python 3.3新,並且僅適用於Windows上的Python 3.5起)
3.3
對於Python之前的版本,在Linux上,人們可以利用直接調用系統的截斷:
import ctypes
libc = ctypes.CDLL("libc.so.6")
libc.truncate(<path>, <length>)
是否可用於python 2.7?謝謝。 – deep
不,這是Python 3.3中的一個新東西 - 應該可以使用Python 2.7中的ctypes直接對O.S>進行系統調用。 但是,如果你有一個腳本來做到這一點(即使它做了很多事情),爲什麼不使用Python 3.6? – jsbueno
當前框架支持Python 2.7。對這種安排做出改變將會很困難。謝謝 – deep