2012-03-17 34 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

相关问题