请你给我任何解释
我使用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
它在我运行代码的目录中创建一个新文件,但我需要重写相同的文件。我怎样才能做到这一点?为什么我一直有同样的行为?
答案 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)