Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中替换文件中的多个值_Python_Shell - Fatal编程技术网

在python中替换文件中的多个值

在python中替换文件中的多个值,python,shell,Python,Shell,我有shell文件test.sh,其中包含以下数据:- export HOME=/some/path/to/directory 导出版本=89 导出连接=数据库连接 现在我想使用python更新shell脚本文件中的HOME、VERSION和CONNECTION值。 如何在python中实现这一点?您可以通过简单的搜索和替换来实现这一点 re.M用于多行 import re s = open('test.sh', 'r').read() s = re.sub(r"^export HOME=.

我有shell文件test.sh,其中包含以下数据:-

export HOME=/some/path/to/directory

导出版本=89

导出连接=数据库连接

现在我想使用python更新shell脚本文件中的HOME、VERSION和CONNECTION值。
如何在python中实现这一点?

您可以通过简单的搜索和替换来实现这一点

re.M
用于多行

import re

s = open('test.sh', 'r').read()

s = re.sub(r"^export HOME=.*$", "export HOME=/new/path", s, 0, re.M)
s = re.sub(r"^export VERSION=.*$", "export VERSION=new_version", s, 0, re.M)
s = re.sub(r"^export CONNECTION=.*$", "export CONNECTION=new_connection", s, 0, re.M)

open('test.sh', 'w').write(s)

您可以读取该文件,然后解析出标记。保留一个包含替换项的字典,然后将该行写回新文件

我将解释重要的部分,其余部分只是常见的文件写入循环

正则表达式将产生一个元组列表,每个元组具有匹配的键和值:

>>> re.findall(r'export (\w+)=(.*)', i)
[('HOME', '/some/path/to/directory'),
 ('VERSION', '89'),
 ('CONNECTION', 'database_connection')]
字典的
get()
方法将获取一个键,如果它不存在,则返回一个默认值None,但您可以覆盖要返回的默认值。利用这一点,我们有以下产品线:

o.write('export {}={}\n'.format(key, lookup.get(key, value)))

这是说“如果关键字存在于查找字典中,则返回值,否则从文件中返回原始值”,换句话说,如果我们不想覆盖关键字的值,只需将原始值写回文件。

请指定是要通过Python修改shell脚本,还是需要在Python脚本中使用这些变量但设置不同的值?使用Python我只想修改shell文件中的值。
o.write('export {}={}\n'.format(key, lookup.get(key, value)))