我有一个我在Python中使用的数据源。我想将这些数据保存到文件中,一旦达到阈值(即:1K,1M),文件就会关闭,并自动打开一个新文件来保存数据。
即:
<file handler with buffer 200>
file.write('a'*1000)
上面的行将根据数据生成5个文件。是否有预先构建的python库来处理这个问题,或者我是否需要自己编写一个?
答案 0 :(得分:1)
如果记录器框架太多,您可以自己完成 - 不需要超过十几行代码。获取文件大小的最简单方法是调用打开文件描述符的tell()
方法。
您还可以跟踪正在输出的字节,但如果您的程序有时会附加到预先存在的文件,则需要额外的逻辑。
答案 1 :(得分: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()