我正在尝试将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)无法正常运行,并且正则表达式未添加
答案 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