LINUX.ORG.RU

История изменений

Исправление emorozov, (текущая версия) :

Учитывая, что это конфиг, то есть размер в любом случае не более десятка-другого килобайт, гораздо проще:

  1. прочитать целиком
  2. сделать замену в памяти
  3. записать

Как-то так:

    def applyScheme(self):
        scheme_directory = self.schemePath.text()

        with open(sway_config, "r") as f:
            config = f.read()

        if "set $theme" in config:
            config = re.sub(r'set \$theme.+$', f'set $theme {scheme_directory}')
            with open(sway_config, "w") as f:
                f.write(config)

Это не совсем эквивалентный код, но, скорее всего, на практике разницы не будет.

Если pathlib использовать, то можно ещё на пару строк короче и понятнее сделать.

Но и так получилось намного короче и понятнее, и нет ненужного двойного чтения файла.

Edit: перечитал и немного исправил попытавшись лучше понять изначальный замысел автора.

Исходная версия emorozov, :

Учитывая, что это конфиг, то есть размер в любом случае не более десятка-другого килобайт, гораздо проще:

  1. прочитать целиком
  2. сделать замену в памяти
  3. записать

Как-то так:

    def applyScheme(self):
        scheme_directory = self.schemePath.text()

        with open(sway_config, "r") as f:
            config = f.read()

        if "set $theme" in config:
            config = config.replace('set $theme', f'set $theme {scheme_directory}')
            with open(sway_config, "w") as f:
                f.write(config)

Это не совсем эквивалентный код, но, скорее всего, на практике разницы не будет.

Если pathlib использовать, то можно ещё на пару строк короче и понятнее сделать.

Но и так получилось намного короче и понятнее, и нет ненужного двойного чтения файла.