Почему .cfg не может быть переписан, но вместо этого создан новый файл?

1

Не могли бы вы дать мне какое-либо объяснение, пожалуйста

У меня есть часть кода с использованием файла 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

Он создает новый файл в каталоге, где я запускаю свой код, но мне нужен тот же файл, который нужно переписать. Как я могу это сделать? И почему я продолжаю получать такое же поведение?

Теги:
configparser

1 ответ

2
Лучший ответ

Поскольку вы используете то же имя файла (config.cfg) при чтении и записи (а также, не изменяя рабочий каталог), вы работаете в одном файле. Поскольку вы пишете файл ~/ui/helper/config.cfg (он создается после запуска кода), это тот, который вы читаете тоже.

Таким образом, вы не открываете (для чтения) файл, который, по вашему мнению, вы. Из [Python]: читать (имена файлов, кодирование = нет)

Если файл с именем в именах файлов не открывается, этот файл будет проигнорирован.
...
Если ни один из названных файлов не существует, экземпляр 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)
      
  • 1
    Необходимо использовать os.path.expanduser("~/ui/config.cfg") . open не раскрывает тильду для вас и будет пытаться получить доступ к каталогу с именем ~ .
  • 0
    Вау, я пропустил ~ !!! Спасибо @DanD. ! Добавлено в ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню