python - 使用Python脚本在记事本中进行算术运算

标签 python notepad++

有一个这种类型的数据库。

数据库.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/

相关文章:

python - 如何在 python Beam 中制作通用的 Protobuf 解析器 DoFn?

python - 如何在python中返回列表中最小元素的索引

python - 如何改进深度图以及我的立体图像缺少什么?

regex - 使用正则表达式在 Notepad++ 中用引号包围字符串

非连续大写单词的正则表达式

search - Notepad++:在一个文件中搜索多个单词(可能在不同的行中)?

notepad++ - 在 Notepad++ 中查找多行

python - CPython可以用Clang编译吗?

python - 如何将 unicode 转换为 4 位二进制表示形式?

html - 是否可以在 Notepad++ 中为 2 种语言设置自动完成?