我有一個我正在Python中使用的數據源。我想將這些數據保存到一個文件中,一旦達到閾值(即:1K,1M),文件關閉,並自動打開一個新文件以保存數據。在Python中使用數據源創建多個文件
即:
<file handler with buffer 200>
file.write('a'*1000)
的線的上方將生成基於所述數據的5個文件。是否有一個預處理的Python庫可以處理這個問題,還是我需要自己寫一個?
我有一個我正在Python中使用的數據源。我想將這些數據保存到一個文件中,一旦達到閾值(即:1K,1M),文件關閉,並自動打開一個新文件以保存數據。在Python中使用數據源創建多個文件
即:
<file handler with buffer 200>
file.write('a'*1000)
的線的上方將生成基於所述數據的5個文件。是否有一個預處理的Python庫可以處理這個問題,還是我需要自己寫一個?
如果一個記錄器框架是太多了,你可以做自己 - 不應該需要比十幾行代碼或讓更多。獲取文件大小的最簡單方法是調用打開文件描述符的tell()
方法。
您也可以跟蹤正在輸出的字節,但如果您的程序有時附加到預先存在的文件,則需要額外的邏輯。
pypi的快速搜索帶來了this這可能會做你想做的,但否則我會建議你自己寫,它會是一個相當簡單的工具來編寫。
我還沒有測試過,但這裏有一個非常簡單的實現,應該這樣做(python3)。
class RotatingFile:
def __init__(self, basename, size, binary=False):
self.basename = basename
self.size = size
self.counter = 0
if binary:
self.buffer = b''
else:
self.buffer = ''
def write(self, data)
self.buffer += data
if len(self.buffer) >= self.size:
data = self.buffer[:self.size]
self.buffer = self.buffer[self.size:]
name = self.basename + str(self.counter)
with open(name) as f:
f.write(data)
self.counter += 1
def flush(self):
name = self.basename + str(self.counter)
with open(name) as f:
f.write(self.buffer)
所以這應該寫信給6個文件:
>>> f = RotatingFile('myfile', 1000)
>>> f.write('a' * 5500)
>>> f.flush()
我看到了,但我可能會將二進制數據作爲源處理,但我不確定這會起作用。 我只是想確保在我將這個工具作爲工具之前,我不會重新發明輪子。 – Lestat 2012-03-17 16:06:47
那麼它可能是最容易的自己寫。但就像我說的那樣,它應該很容易。 – aquavitae 2012-03-17 16:08:08
在編寫Python 2.x代碼時,請在創建類時從「object」繼承。 – jsbueno 2012-03-18 15:04:06