python搜索字符串并使用正则表达式追加到它

时间:2012-06-13 05:26:36

标签: python regex

我需要在名为config.ini的配置文件中搜索称为jvm_args的特定参数

**contents of config.ini:
first_paramter=some_value1
second_parameter=some_value2
jvm_args=some_value3**

我需要知道如何在我的文件中找到这个参数并在其值上添加一些内容(即将一个字符串附加到字符串some_value3)。

4 个答案:

答案 0 :(得分:2)

如果你“只是”想在ini文件中找到键和值,我认为configparser模块比使用regexp更好。但是,configparser断言该文件有“部分”。

configparser的文档在这里:http://docs.python.org/library/configparser.html - 底部的有用示例。 configparser还可用于设置值和写出新的.ini文件。

输入文件:

$ cat /tmp/foo.ini 
[some_section]
first_paramter = some_value1
second_parameter = some_value2
jvm_args = some_value3

代码:

#!/usr/bin/python3

import configparser

config = configparser.ConfigParser()
config.read("/tmp/foo.ini")
jvm_args = config.get('some_section', 'jvm_args')
print("jvm_args was: %s" % jvm_args)

config.set('some_section', 'jvm_args', jvm_args + ' some_value4')
with open("/tmp/foo.ini", "w") as fp:
    config.write(fp)

输出文件:

$ cat /tmp/foo.ini
[some_section]
first_paramter = some_value1
second_parameter = some_value2
jvm_args = some_value3 some_value4

答案 1 :(得分:1)

您可以使用re.sub

import re
import os

file = open('config.ini')
new_file = open('new_config.ini', 'w')
for line in file:
    new_file.write(re.sub(r'(jvm_args)\s*=\s*(\w+)', r'\1=\2hello', line))
file.close()
new_file.close()

os.remove('config.ini')
os.rename('new_config.ini', 'config.ini')

还要检查ConfigParser

答案 2 :(得分:0)

正如avasal和tobixen都建议的那样,你可以使用python ConfigParser模块来做到这一点。例如,我使用了这个“config.ini”文件:

[section]
framter = some_value1
second_parameter = some_value2
jvm_args = some_value3**

并运行此python脚本:

import ConfigParser

p = ConfigParser.ConfigParser()
p.read("config.ini")
p.set("section", "jvm_args", p.get("section", "jvm_args") + "stuff")
with open("config.ini", "w") as f:
    p.write(f)

运行脚本后“config.ini”文件的内容为:

[section]
framter = some_value1
second_parameter = some_value2
jvm_args = some_value3**stuff

答案 3 :(得分:0)

没有regex你可以尝试:

with open('data1.txt','r') as f:
    x,replace=f.read(),'new_entry'
    ind=x.index('jvm_args=')+len('jvm_args=')
    end=x.find('\n',ind) if x.find('\n',ind)!=-1 else x.rfind('',ind)
    x=x.replace(x[ind:end],replace)

with open('data1.txt','w') as f:
    f.write(x)