在python中每天创建一个日志文件

时间:2014-05-12 00:16:46

标签: python

我想在python中编写一个脚本,它将记录一个文件,每天一个。 它将记录gps记录,日志文件将是一个gpx(我有脚本)。 因此,今天它将创建一个名为12-05-2014.gpx的文件,并将保留所有gps记录,直到它变为13-05-2014。然后它将创建一个新文件13-05-2014.gpx并继续登录。 这可能吗?你可以给我一些提示吗?

4 个答案:

答案 0 :(得分:3)

N.B。:我理解您正在扩展处理GPS日志的现有python脚本。如果没有,@ aj8uppal可能是对的。

我建议您使用日志记录模块输出数据,并利用代表您执行此操作的RotatingFileHandler。与Formatter类一起,您可以使用电力记录模块来进行旋转日志。

虽然如果你认为python的日志记录模块是不行的 - 虽然我认为这是最好的选择,但你总是可以在你的程序中使用以下写入功能:

import os
import time

class RotatingFileOpener():
    def __init__(self, path, mode='a', prepend="", append=""):
        if not os.path.isdir(path):
            raise FileNotFoundError("Can't open directory '{}' for data output.".format(path))
        self._path = path
        self._prepend = prepend
        self._append = append
        self._mode = mode
        self._day = time.localtime().tm_mday
    def __enter__(self):
        self._filename = self._format_filename()
        self._file = open(self._filename, self._mode)
        return self
    def __exit__(self, *args):
        return getattr(self._file, '__exit__')(*args)
    def _day_changed(self):
        return self._day != time.localtime().tm_mday
    def _format_filename(self):
        return os.path.join(self._path, "{}{}{}".format(self._prepend, time.strftime("%Y%m%d"), self._append))
    def write(self, *args):
        if self._day_changed():
            self._file.close()
            self._file = open(self._format_filename())
        return getattr(self._file, 'write')(*args)
    def __getattr__(self, attr):
        return getattr(self._file, attr)
    def __iter__(self):
        return iter(self._file)

您可以使用如下:

with RotateFileOpener('/var/log/gps', prepend='gps_data-', append='.gpx') as logger:
    while True:
        log = get_gpx_data()
        logger.write(log)

将写入/var/log/gps

/var/log/gps/gps_data-20140512.gpx
/var/log/gps/gps_data-20140513.gpx
/var/log/gps/gps_data-20140514.gpx
…

答案 1 :(得分:2)

可能与此类似:

import time
datafile = open('mydatafile')
while True:
        filename = str(time.strftime("%d-%m-%Y"))+'.gpx'
        with open(filename, 'w') as myfile:
                myfile.write(datafile.read())
        time.sleep(60)

使用time模块获取时间,并将其用作文件名。然后,每分钟,您更新该文件名,并将datafile的内容写入该文件名。当然,您可能需要更改此代码,因为对您来说一切都不一样。

答案 2 :(得分:0)

除了提供的代码:

需要在追加模式下打开文件。在Windows和Rapsbian上,这不起作用,我不得不改变这一行:         self._file = open(self._filename)

成:         self._file = open(self._filename,self._mode)

希望这有助于某人充分利用这一点。

GWS

答案 3 :(得分:0)

这一行:

self._file = open(self._format_filename())

应该是:

self._file = open(self._format_filename(), self_mode)

这将创建一个新文件并写入它。没有添加' self_mode'文件已创建,但不会打开进行写作。