我有一个我正在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