通过configparser模块使用当前datetimestamp更新日期格式字段

问题描述 投票:0回答:1

我正在使用configparser模块的插值功能。我的问题是针对不同部分引用的值,我希望将日期或日期时间作为其值的一部分。以下是我能想到的,虽然它完成了我的工作,我觉得可以有更好,更优雅的方式来处理这个问题。

import configparser
from io import StringIO
import datetime


def update_tmstmp_value(config_string):
    fo = StringIO(config_string)
    data = ''
    for line in fo.readlines():
        if line.startswith('tmstmp'):
            key, tmstmp_str = line.strip().split('=')
            try:
                value = datetime.datetime.now().strftime(tmstmp_str)
            except ValueError:
                value = datetime.datetime.now().strftime('%Y%m%d')
            data += key + '=' + value + '\n'
        else:
            data += line
    return data


config_data = """
[DEFAULT]
tmstmp=%Y%m%d
type=REPLACE_ME_%(tmstmp)s

[section1]
item1=val1_%(type)s
item2=val2

[section2]
item3=val3_%(type)s
item4=val4
"""

config = configparser.ConfigParser()
modified_config_data = update_tmstmp_value(config_data)
config.read_string(modified_config_data)
print(config.items('section1'))

输出:

[('tmstmp', '20190402'), ('type', 'REPLACE_ME_20190402'), ('item1', 'val1_REPLACE_ME_20190402'), ('item2', 'val2')]
python-3.x configparser
1个回答
0
投票

我在ConfigParser的包装器类中具有以下功能,它几乎完成了您要执行的操作。

这样我就可以将日期添加到我想要的任何option = vars中。

    def get_date():
        """
        Sets up a date formatted string.

        :return: Date string
        """
        return datetime.now().strftime("%Y%b%d")

    def prepend_date_to_var(self, sect, option):
        """
        Function that allows the ability to prepend a
        date to a section variable.

        :param sect: INI section to look for variable
        :param option: INI search variable under INI section
        :return: Date is prepended to variable
        """
        if self.config_parser.get(sect, option):
            var = self.config_parser.get(sect, option)
            var_with_date = var + '_' + self.get_date()
            self.config_parser.set(sect, option, var_with_date)
© www.soinside.com 2019 - 2024. All rights reserved.