我有一个.txt文件,我想用sys.argv
或argparse
或其他包创建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文件中的动态变量?
我不想要替换我的东西,所以参数更好。
答案 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]=2
和sys.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