gpt4 book ai didi

python - Pyparsing:如何解析数据然后编辑 .txt 文件中的特定值?

转载 作者:太空狗 更新时间:2023-10-29 22:17:02 25 4
gpt4 key购买 nike

我的数据位于一个 .txt 文件中(不,我无法将其更改为其他格式),它看起来像这样:

变量名=值
东西=这个值
youget = the_idea

到目前为止,这是我的代码(取自 Pyparsing 中的示例):

from pyparsing import Word, alphas, alphanums, Literal, restOfLine, OneOrMore, \
empty, Suppress, replaceWith

input = open("text.txt", "r")
src = input.read()

# simple grammar to match #define's
ident = Word(alphas + alphanums + "_")
macroDef = ident.setResultsName("name") + "= " + ident.setResultsName("value") + Literal("#") + restOfLine.setResultsName("desc")
for t,s,e in macroDef.scanString(src):
print t.name,"=", t.value

那么我如何告诉我的脚本为特定变量编辑特定值?
示例:
我想将变量名的值从 value 更改为 new_value。所以本质上变量 =(我们要编辑的数据)。

我可能应该明确表示我不想直接进入文件并通过将 value 更改为 new_value 来更改值,但我想解析数据、找到变量然后给它一个新值。

最佳答案

即使您已经选择了另一个答案,让我来回答您最初的问题,即如何使用 pyparsing 来做到这一点。

如果您尝试对某些文本主体进行选择性更改,那么 transformString 是比 scanString 更好的选择(尽管 scanString 或 searchString 可以通过查找匹配文本来验证您的语法表达式)。 transformString 将在扫描文本以查找匹配项时对您的输入字符串应用标记抑制或解析操作修改。

# alphas + alphanums is unnecessary, since alphanums includes all alphas
ident = Word(alphanums + "_")
# I find this shorthand form of setResultsName is a little more readable
macroDef = ident("name") + "=" + ident("value")

# define values to be updated, and their new values
valuesToUpdate = {
"variablename" : "new_value"
}

# define a parse action to apply value updates, and attach to macroDef
def updateSelectedDefinitions(tokens):
if tokens.name in valuesToUpdate:
newval = valuesToUpdate[tokens.name]
return "%s = %s" % (tokens.name, newval)
else:
raise ParseException("no update defined for this definition")
macroDef.setParseAction(updateSelectedDefinitions)

# now let transformString do all the work!
print macroDef.transformString(src)

给予:

variablename = new_value
something = thisvalue
youget = the_idea

关于python - Pyparsing:如何解析数据然后编辑 .txt 文件中的特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4494233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com