Создание нескольких файлов из источника данных в Python - PullRequest
2 голосов
/ 17 марта 2012

У меня есть источник данных, с которым я работаю в Python. Я хотел бы сохранить эти данные в файлы, чтобы при достижении порогового значения (например, 1 КБ, 1 МБ) файл закрывался и автоматически открывался новый файл для сохранения данных.

е:

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

Строка выше создаст 5 файлов на основе данных. Есть ли предварительно собранная библиотека Python, которая будет обрабатывать это, или мне нужно написать ее самому?

Ответы [ 2 ]

1 голос
/ 17 марта 2012

Если каркас логгера слишком велик, вы можете сделать это самостоятельно - не нужно более десятка строк кода или около того.Самый простой способ получить размер вашего файла - вызвать метод tell() вашего дескриптора открытого файла.

Вы также можете отслеживать выводимые байты, но это требует дополнительной логики, если ваша программа иногда добавляет к уже существующему файлу.

0 голосов
/ 17 марта 2012

Быстрый поиск по pypi вызывает это , которое может делать то, что вы хотите, но в противном случае я бы предложил написать это самостоятельно, это были бы довольно простые инструменты для написания.

Я не проверял это, но вот очень простая реализация, которая должна это делать (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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...