Замена люфтов на косые черты в строке

Отредактированный вопрос: я пишу функцию python, которая принимает строку пути, скопированную из окон (то есть с обратной косой чертой), и возвращает строку с косой чертой влево, которая может использоваться python в качестве пути. Проблема возникает из-за комбинации люфтов и других символов, таких как \ n, \ b ... Благодаря Coldspeed у меня теперь есть функция, которая вроде как помогает:

def back2forwardSlash(backSlash_string):    
    return backSlash_string.replace('\\', '/')

Что по-прежнему неудовлетворительно, так это то, что я должен вызывать функцию с r перед строкой, чтобы читать ее как необработанную: fileNamePath = back2forwardSlash(r'C:\Users\Dropbox\netCFD4\b30.137.nc') Это предотвращает передачу переменной в функцию вместо вставки в строку. По крайней мере, я не думаю, что у меня есть решение.


person Pauli    schedule 19.09.2017    source источник
comment
ты вообще пробовал backSlash_string.replace('\\', '/')?   -  person GPhilo    schedule 19.09.2017
comment
Попробуйте следовать этому совету: stackoverflow.com/a/26867674/4528269   -  person Ethan Field    schedule 19.09.2017


Ответы (1)


питоническим способом сделать это будет использовать _1 _ .

def foo(string):
    return string.replace('\\', '/')

Кроме того, причина вашей ошибки заключается в том, что обратная косая черта может быть принята за начало escape-последовательности, которая представляет собой группу символов, которые интерпретируются иначе, чем их представление. Это означает, что последовательность \b - это не два отдельных символа, а один символ \b или \x08. Итак, вы захотите передать своей функции необработанную строку:

print(foo(r'C:\Users\Dropbox\netCFD4\b30.137.nc'))

Необработанная строка будет буквально обрабатывать обратную косую черту. Альтернативой было бы избежать всех ваших обратных косых черт.

person cs95    schedule 19.09.2017
comment
Спасибо, COLDSPEED. Метод replace делает это довольно хорошо, но проблема фактически решается только путем вызова функции с r перед строкой аргумента, как вы предложили. Это только частично удовлетворительно, поскольку я не могу передать функцию с переменной, но всегда приходится вручную вставлять строку после r, чтобы получить ее в сыром виде. По крайней мере, я не думаю, что у меня есть решение. - person Pauli; 19.09.2017
comment
@Pauli Если ваши строки поступают вот так, значит, проблема с источником. Кроме того, нет реального способа сделать переменные необработанными строками ... - person cs95; 19.09.2017