【问题标题】:Can I delete a specific value within a section of a config.ini file using Python configparser?我可以使用 Python configparser 删除 config.ini 文件的一部分中的特定值吗?
【发布时间】:2020-10-17 14:56:33
【问题描述】:

我有一个 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())。删除功能基于对How to remove a section from an ini file using Python ConfigParser?的回答

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])并将其删除。

【问题讨论】:

    标签: python config ini configparser


    【解决方案1】:

    如果我对您的理解正确,您希望在更新 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,但这并不重要。

    【讨论】:

      【解决方案2】:

      这是一种有点不同的方法,但仍然可能适用于您的目的。除了删除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 文件,并尝试解决这个问题。所以,我希望我没有做与问题完全无关的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-12
        • 1970-01-01
        • 2016-10-06
        • 2012-04-29
        • 1970-01-01
        • 2022-11-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多