为什么.cfg无法重写,但新文件是否已创建?

时间:2018-06-19 08:16:32

标签: python configparser

请你给我任何解释

我使用ConfigParser获得了部分代码 我正在目录〜/ ui / config.cfg中读取的文件 在我调用下面的函数后,我在我的模块所在的目录中得到一个新文件(〜/ ui / helper / config.cfg)

class CredentialsCP:

    def __init__(self, cloud_name=None):
       self.config = ConfigParser.ConfigParser()
       self.cloud_name = cloud_name

    def rewrite_pass_in_config(self, cloud, new_pass):
        if new_pass:
           self.config.read('config.cfg')
           self.config.set(cloud, 'password', new_pass)
           with open('config.cfg', 'wb') as configfile:
            self.config.write(configfile)
        else:
           return False

它在我运行代码的目录中创建一个新文件,但我需要重写相同的文件。我怎样才能做到这一点?为什么我一直有同样的行为?

1 个答案:

答案 0 :(得分:2)

由于您在读取和写入时使用相同的文件名( config.cfg )(并且还没有更改工作目录),因此您在同一文件上操作。由于您正在编写〜/ ui / helper / config.cfg 文件(它是在运行代码后创建的),因此您也正在阅读该文件。

所以,您没有打开(用于阅读)您认为自己的文件。来自[Python]: read(filenames, encoding=None)

  

如果无法打开文件名中指定的文件,该文件将被忽略
  ......   如果不存在任何命名文件,则ConfigParser实例将包含空数据集

您正在读取一个不存在的文件,这会产生一个空配置,这就是您在(所需)文件中编写的配置。要解决您的问题,请按完整或相对名称指定所需文件。你可以有类似的东西:

  • __init__

    self.file_name = os.path.expanduser("~/ui/config.cfg") # Or any path processing code
    
  • rewrite_pass_in_config

    • 读:

      self.config.read(self.file_name)
      
    • with open(self.file_name, "wb") as configfile:
          self.config.write(configfile)