使用python脚本在txt文件中定义变量

时间:2016-10-07 21:33:12

标签: python python-2.7 parameter-passing argparse sys

我有一个.txt文件,我想用sys.argvargparse或其他包创建python脚本来定义txt文件中的一些变量,我会得到一些结果。

我想根据传递给python脚本的参数

更新文本文件中的变量

txt文件可能是这样的:

input number 1= %var1%
input number 2= %var2%
result = %vresult(var1-var2)%

必须var1,var2由用户在python脚本中定义一些输入并且我取结果(var1-var2为ex)

我可以轻松地做到这一点,但我不知道如何将python脚本中的参数连接到txt。

如何编写python脚本来更新txt文件中的动态变量?

我不想要替换我的东西,所以参数更好。

3 个答案:

答案 0 :(得分:1)

这是使用regex和字典以及使用sys.argv进行输入的另一种方式:

import sys,re
v1 = sys.argv[1]
v2 = sys.argv[2]

with open('file.txt','r') as f:
    content = f.read()

repl = {'var1':v1, 'var2':v2}

repl_pattern = re.compile(r'(' + '|'.join(repl.keys()) + r')')
final_data = repl_pattern.sub(lambda x: repl[x.group()], content)

with open('file.txt','w') as new:
    new.write(final_data)

<强>结果:

file.txt最初具有以下内容:

input number 1= var1
input number 2= var2
result = vresult(var1-var2)

并在运行上述代码(使用:sys.argv[1]=2sys.argv[2] = 3)后,文件更改为:

input number 1= 3
input number 2= 2
result = vresult(3-2)

如果您想要result = 1而不是result = vresult(3-2),请添加以下代码:

result = str(int(v1)-int(v2))
key3 = 'vresult('+v1+'-'+v2+')'
final_data = final_data.replace(key3,result)

with open('file.txt','w') as new: ....

之前

答案 1 :(得分:0)

几乎肯定有更好的方法可以做到这一点,但这听起来像一个有趣的问题,所以我决定尝试一下。我定义了一个文件文件,其变量名称如下所示:

<强> newfile.txt:

x = 1
y = 2
z = 3

通过读取类型中的一行并符合“var = value”输入格式,您可以解析文本文件以获取正确的变量,然后使用新值重写该文件。

import fnmatch


var2change = "z = 17"
identifier = var2change.split('=')[0] # Get variable name

# Read file
file = open('newfile.txt', 'r')
fileLines = file.read()
fileLines = fileLines.splitlines()

for lineNum,var in enumerate(fileLines):
    if fnmatch.fnmatch(str(var),''.join([identifier,'*'])): break # Found variable to change

file.close()

file = open("newfile.txt", "w")
for ln, data in enumerate(fileLines):
    if ln == lineNum:
        lineToWrite = ''.join([var2change, '\n'])
    else:
        lineToWrite = ''.join([data, '\n'])

    file.write(lineToWrite)

file.close()

这将重写文件:

<强> newfile.txt:

x = 1
y = 2
z = 17

答案 2 :(得分:0)

parameter.txt文件包含:

Access to XMLHttpRequest at 'https://sanctum.test/sanctum/csrf-cookie' from origin 'https://nuxt.sanctum.test.test' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

下面是python代码:

SANCTUM_STATEFUL_DOMAINS

以下是结果:

sum = 30