Как использовать необработанную (r) строку, когда строка является переменной?

#python #string

#python #строка

Вопрос:

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

 chrome_options.add_experimental_option('prefs', {
        'download.default_directory': r'C:UsersxxxDownloads'})
  

Приведенный выше код работает.
Однако я хочу передать путь к каталогу в качестве переменной.

Это не работает:

 pathname_string = 'C:UsersxxxDownloads'
chrome_options.add_experimental_option('prefs', {
    'download.default_directory': pathname_string }) 
  

Я получаю ошибку OSError: [WinError 123] Синтаксис имени файла, имени каталога или метки тома неверен: ‘C:UsersxxxDownloadsn ‘

Я пробовал такие вещи, как:

 pathname_string = 'C:UsersxxxDownloads'
(...)
chrome_options.add_experimental_option('prefs', {
        'download.default_directory': r   pathname_string})
  

Или напрямую с помощью:

 pathname_string = "'C:UsersxxxDownloads'"
pathname_string = "r"   pathname_string 
(...)
chrome_options.add_experimental_option('prefs', {
        'download.default_directory': pathname_string})
  

Но, похоже, это не работает.

Обратите внимание, что «pathname_string» — это переменная, которая считывается из внешнего источника; каталог не задан жестко.

Я впервые использую префикс «r» для буквальных строк, поэтому я немного растерялся. Может кто-нибудь просветить меня? Спасибо!

Комментарии:

1. pathname_string = r'C:Downloads'

2. Как можно создать ту же самую строку, если часть пути является уже существующей строковой переменной?

3. Я не уверен, что вы имеете в виду. Похоже, вы ходите по кругу. т.Е. Если путь является обычной строкой, у вас уже есть проблема, если обратная косая черта не экранирована.

4. Необработанные строки применяются только к литералам , поскольку они предполагают изменение способа анализа литерала. Для уже существующих значений не требуется синтаксический анализ. Как только у вас есть str объект, не имеет значения, был ли он создан из строкового литерала, необработанного строкового литерала или какого-либо другого метода.

5. @buran Пожалуйста, посмотрите мой комментарий к ответу чепне.

Ответ №1:

Вы просто определяете pathname_string с помощью необработанного строкового литерала.

 # exactly equivalent to 'C:\Downloads'
pathname_string = r'C:Downloads'

chrome_options.add_experimental_option(
    'prefs',
    {'download.default_directory': pathname_string}
)
  

Если pathname_string считывается из другого источника, тогда вообще не задействованы литералы, необработанные или иные. В ваши программы не входит ответственность за то, чтобы убедиться, что ей передано правильное значение.

Комментарии:

1. Я понимаю. Я думаю, что я не совсем понимаю некоторые вещи, тогда, пожалуйста, простите мое невежество. Я считываю путь как переменную из файла, используя open() и line.split() , и он имеет тип string . Однако, если я использую ее непосредственно в фрагменте кода, я получаю проблему : "[WinError 123] The filename, directory name, or volume label syntax is incorrect: 'C:\Users\xxx\Downloadsn'" . Однако, если я жестко r 'C:\Users\xxx\Downloadsn' закодирую, тогда все будет работать нормально.