我可以使用 Python configparser 删除 config.ini 文件的某个部分中的特定值吗?
Can I delete a specific value within a section of a config.ini file using Python configparser?
我有一个 config.ini 文件,我正试图删除 config.ini 文件的某个部分中的特定值。我基本上想删除列表中的索引。 config.ini 文件是:
[INPUT]
intervals = [[4000, 6000], [25000, 55000]]
比如我要删除[4000, 6000]
,这样新建的config.ini文件就变成了:
[INPUT]
intervals = [[25000, 55000]]
我的代码下面有两个功能,一个是导入 config.ini (load_args()
) 的内容,另一个是删除 config.ini (delete_args()
) 的一部分.删除功能基于对
的回答
import configparser
import ast
def load_args():
config = configparser.ConfigParser()
config.read('config.ini')
interval = ast.literal_eval(config['INPUT']['intervals'])
print(interval)
load_args()
def delete_args():
config = configparser.ConfigParser()
with open('config.ini', 'r+') as s:
config.readfp(s)
config.remove_section('INPUT')
s.seek(0)
config.write(s)
s.truncate()
interval = ast.literal_eval(config['INPUT']['intervals'])
print(interval)
delete_args()
上面的当前 delete_args()
函数会删除 config.ini 中的所有内容。我知道 delete_args()
需要一种方法来找到 config.ini 中的值 [4000, 6000]
,所以我是想知道是否可以将 [4000, 6000]
作为参数传入 delete_args()
,然后找到 [INPUT]
部分,并在 intervals
内找到指定的间隔 ([4000, 6000]
)并将其删除。
如果我对您的理解正确,您希望在更新 config.ini 时通过 delete_args
函数中的参数从多维列表中删除特定间隔。我想到了这个解决方案:
import configparser
import ast
parser = configparser.ConfigParser()
interval = []
def load_args():
global interval
parser.read('config.ini')
interval = ast.literal_eval(parser['INPUT']['intervals'])
print(interval)
load_args()
def delete_args(index):
global interval
interval.pop(index)
parser.set('INPUT', 'intervals', str(interval))
with open("config.ini", "w+") as configfile:
parser.write(configfile)
def delete_args2(ele):
global interval
interval = [x for x in interval if x != ele]
parser.set('INPUT', 'intervals', str(interval))
with open("config.ini", "w+") as configfile:
parser.write(configfile)
#delete_args(0)
delete_args2([4000, 6000])
delete_args(0)
load_args()
输出
[[4000, 6000], [25000, 55000]]
[[25000, 55000]]
我使用了一些不同的更新策略,只是 pop()
特定索引处的元素。我认为这是一种非常干净的方式。如果你更喜欢传递一个值来删除,你可以使用 interval.remove(ele)
或更强大的东西,比如 [x for x in interval if x != ele]
而不是 pop(index)
。
注意:为了简单起见,我在全局范围内定义了 interval
,但这并不重要。
这是一种略有不同的方法,但仍可能适合您的目的。我们可以按如下方式更新它,而不是删除 intervals
:
import configparser
def update_args(section, element, value):
config = configparser.ConfigParser()
config.read('config.ini')
config.set(section, element, value)
with open('config.ini', 'w') as f:
config.write(f)
update_args("INPUT", "intervals", "[25000, 55000]")
顺便说一下,我刚刚在这个问题中听说了 ini
文件,并尝试解决这个问题。所以,我希望我没有做与问题完全无关的事情。
我有一个 config.ini 文件,我正试图删除 config.ini 文件的某个部分中的特定值。我基本上想删除列表中的索引。 config.ini 文件是:
[INPUT]
intervals = [[4000, 6000], [25000, 55000]]
比如我要删除[4000, 6000]
,这样新建的config.ini文件就变成了:
[INPUT]
intervals = [[25000, 55000]]
我的代码下面有两个功能,一个是导入 config.ini (load_args()
) 的内容,另一个是删除 config.ini (delete_args()
) 的一部分.删除功能基于对
import configparser
import ast
def load_args():
config = configparser.ConfigParser()
config.read('config.ini')
interval = ast.literal_eval(config['INPUT']['intervals'])
print(interval)
load_args()
def delete_args():
config = configparser.ConfigParser()
with open('config.ini', 'r+') as s:
config.readfp(s)
config.remove_section('INPUT')
s.seek(0)
config.write(s)
s.truncate()
interval = ast.literal_eval(config['INPUT']['intervals'])
print(interval)
delete_args()
上面的当前 delete_args()
函数会删除 config.ini 中的所有内容。我知道 delete_args()
需要一种方法来找到 config.ini 中的值 [4000, 6000]
,所以我是想知道是否可以将 [4000, 6000]
作为参数传入 delete_args()
,然后找到 [INPUT]
部分,并在 intervals
内找到指定的间隔 ([4000, 6000]
)并将其删除。
如果我对您的理解正确,您希望在更新 config.ini 时通过 delete_args
函数中的参数从多维列表中删除特定间隔。我想到了这个解决方案:
import configparser
import ast
parser = configparser.ConfigParser()
interval = []
def load_args():
global interval
parser.read('config.ini')
interval = ast.literal_eval(parser['INPUT']['intervals'])
print(interval)
load_args()
def delete_args(index):
global interval
interval.pop(index)
parser.set('INPUT', 'intervals', str(interval))
with open("config.ini", "w+") as configfile:
parser.write(configfile)
def delete_args2(ele):
global interval
interval = [x for x in interval if x != ele]
parser.set('INPUT', 'intervals', str(interval))
with open("config.ini", "w+") as configfile:
parser.write(configfile)
#delete_args(0)
delete_args2([4000, 6000])
delete_args(0)
load_args()
输出
[[4000, 6000], [25000, 55000]]
[[25000, 55000]]
我使用了一些不同的更新策略,只是 pop()
特定索引处的元素。我认为这是一种非常干净的方式。如果你更喜欢传递一个值来删除,你可以使用 interval.remove(ele)
或更强大的东西,比如 [x for x in interval if x != ele]
而不是 pop(index)
。
注意:为了简单起见,我在全局范围内定义了 interval
,但这并不重要。
这是一种略有不同的方法,但仍可能适合您的目的。我们可以按如下方式更新它,而不是删除 intervals
:
import configparser
def update_args(section, element, value):
config = configparser.ConfigParser()
config.read('config.ini')
config.set(section, element, value)
with open('config.ini', 'w') as f:
config.write(f)
update_args("INPUT", "intervals", "[25000, 55000]")
顺便说一下,我刚刚在这个问题中听说了 ini
文件,并尝试解决这个问题。所以,我希望我没有做与问题完全无关的事情。