有一个这种类型的数据库。
数据库.ini:
[1 StatsObject]
InfoStat=1
[2 StatsObject]
InfoStat=2
etc.
InfoStat 值需要乘以特定的修饰符。
我使用 Notepad++ 的Python脚本
import re
FixedStat = 0
StatMod = 20
Result = 0
FixedStatStr = ""
content = editor.getText()
for row, line in enumerate(content.split('\n')):
for m in re.finditer(r'InfoStat=[0-9]+', line):
if(int(m.group(0).split('=').pop()) > 0):
FixedStat = int(m.group(0).split('=').pop())
Result = FixedStat * StatMod
FixedStatStr = 'InfoStat=' + str(Result)
content = re.sub(m.group(0), FixedStatStr, content)
editor.setText(content)
预期结果:
[1 StatsObject]
InfoStat=20
[2 StatsObject]
InfoStat=40
实际结果:
[1 StatsObject]
InfoStat=400
[2 StatsObject]
InfoStat=40
我想在将1转换成20之后, 在将 2 转换为 40 期间, 20也改变, 因为:
m.group(0) == 'InfoStat = 2'
我使用
re.sub
对于所有文本
请告诉我如何更改特定行中 InfoStat 的值,而不影响其他行。
最佳答案
无需评论您通过特定程序驱动此操作的努力,通过使用标准库 configparser 模块可以大大清理数据的读取。这是一个简化版本:
import configparser
StatMod = 20
config = configparser.ConfigParser()
config.read('Database.ini')
for section in config.sections():
for k, v in config[section].items():
if 'infostat' in k: # configparses squashes case
print(f"[{section}]")
print(f"InfoStat={int(v) * StatMod}")
关于python - 使用Python脚本在记事本中进行算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56082222/