如何使用python将增量版本号保存在文件中?

时间:2019-06-27 08:52:10

标签: python regex file-io

我正在尝试将ElasticSearch的版本保存在文件中。

输入文件:

// filter list
var nullEntries = entries.Where(i => i.Seed == null).ToList();

// use only filtered values
var rIdx = rnd.Next(nullEntries.Count - 1);
var player = nullEntries[rIdx];
entries.Remove(player);

第一次执行后输出文件

ElasticSearch 5:1:

第二次执行后输出文件

ElasticSearch 5:1:0

第三次执行后输出文件

ElasticSearch 5:1:1
ElasticSearch 5:1:0

我的代码在下面

ElasticSearch 5:1:2
ElasticSearch 5:1:1
ElasticSearch 5:1:0

我面临的两个问题seek(0,0)无法正常运行,并且正则表达式未添加

2 个答案:

答案 0 :(得分:1)

您可以使用

import re
reg = r'\A(.*:)(\d*)$'
with open('elastic.txt', 'r') as fread:
    data = fread.read()
    with open('elastic.txt', 'w') as fwrite:
        fwrite.write(re.sub(reg, lambda x: "{}{}\n{}".format(x.group(1), str(int(x.group(2)) + 1), x.group()) if len(x.group(2)) else "{}0".format(x.group(1)) , data, 1, re.M))

详细信息

  • \A(.*:)(\d*)$-一个正则表达式,如果它有:,则在文件的开头获取行,并捕获直到:并包括在Group 1中且包括零或更多的部分数字进入第2组(在行尾)
  • data是整个文件的内容
  • lambda x: "{}{}\n{}".format(x.group(1), str(int(x.group(2)) + 1), x.group()) if len(x.group(2)) else "{}0".format(x.group(1))替换为组1,增加组2,并换行+整个第一行 如果组2包含数字,则将0添加到第一行而不加倍。

答案 1 :(得分:1)

具有自定义incr_patch_version函数的扩展解决方案:

import re

regex = r'(?<=:)\d*$'


def incr_patch_version(fname):
    with open(fname, 'r+') as f:
        lines = f.readlines()
        new_line = re.sub(regex, lambda x: str(int(x.group()) + 1 if x.group().isnumeric() else 0), lines[0])
        f.seek(0)
        f.write(new_line) if lines[0].strip().endswith(':') else f.writelines([new_line, *lines])


fname = 'elastic.txt'

incr_patch_version(fname)
incr_patch_version(fname)
incr_patch_version(fname)
incr_patch_version(fname)

elastic.txt的最终内容:

ElasticSearch 5:1:3
ElasticSearch 5:1:2
ElasticSearch 5:1:1
ElasticSearch 5:1:0