2012-03-17 58 views
2

我有一個我正在Python中使用的數據源。我想將這些數據保存到一個文件中,一旦達到閾值(即:1K,1M),文件關閉,並自動打開一個新文件以保存數據。在Python中使用數據源創建多個文件

即:

<file handler with buffer 200> 
file.write('a'*1000) 

的線的上方將生成基於所述數據的5個文件。是否有一個預處理的Python庫可以處理這個問題,還是我需要自己寫一個?

回答

1

如果一個記錄器框架是太多了,你可以做自己 - 不應該需要比十幾行代碼或讓更多。獲取文件大小的最簡單方法是調用打開文件描述符的tell()方法。

您也可以跟蹤正在輸出的字節,但如果您的程序有時附加到預先存在的文件,則需要額外的邏輯。

0

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() 
+0

我看到了,但我可能會將二進制數據作爲源處理,但我不確定這會起作用。 我只是想確保在我將這個工具作爲工具之前,我不會重新發明輪子。 – Lestat 2012-03-17 16:06:47

+0

那麼它可能是最容易的自己寫。但就像我說的那樣,它應該很容易。 – aquavitae 2012-03-17 16:08:08

+0

在編寫Python 2.x代碼時,請在創建類時從「object」繼承。 – jsbueno 2012-03-18 15:04:06

相關問題