#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'
закодирую, тогда все будет работать нормально.