Я хотел бы заменить обратную косую черту \ в пути Windows косой чертой / с помощью python. К сожалению, я пытаюсь несколько часов, но не могу решить эту проблему. Я видел здесь другие вопросы, но все же не могу найти решение. Кто-нибудь может мне помочь?
Вот что я пытаюсь:
path = "\\ftac\admin\rec\pir"
path = path.replace("\", "/")
Но я получил ошибку (SyntaxError: EOL при сканировании строкового литерала) и не возвращаю путь, как я хочу:
//ftac/admin/rec/pir
, как я могу это решить?
Я также пробовал path = path.replace(os.sep, "/")
или path = path.replace("\\", "/")
, но в обоих случаях первая двойная обратная косая черта становится одинарной, а \a удаляется.
Вы также можете попробовать import os
---> path = path.replace(os.sep, "/")
попробовал оба метода, но первая двойная обратная косая черта становится одинарной, а также \a был удален из пути
О боже, это немного сложнее, чем кажется на первый взгляд.
Ваша проблема в том, что вы сохранили свои пути Windows как обычные строки, а не необработанные строки. Преобразование строк в их необработанное представление происходит с потерями и безобразно.
Это потому, что когда вы создаете строку типа "\a"
, интерпретатор видит специальный символ "\x07"
.
Это означает, что вам нужно вручную узнать, какие из этих специальных символов вы ожидаете, а затем [с потерями] взломать, если вы видите их представление (, например, в этом примере ):
def str_to_raw(s):
raw_map = {8:r'\b', 7:r'\a', 12:r'\f', 10:r'\n', 13:r'\r', 9:r'\t', 11:r'\v'}
return r''.join(i if ord(i) > 32 else raw_map.get(ord(i), i) for i in s)
>>> str_to_raw("\\ftac\admin\rec\pir")
'\\ftac\\admin\\rec\\pir'
Теперь вы можете использовать модуль pathlib
, он может обрабатывать пути независимо от системы. В вашем случае вы знаете, что у вас есть Windows-подобные пути в качестве входных данных, поэтому вы можете использовать следующее:
import pathlib
def fix_path(path):
# get proper raw representaiton
path_fixed = str_to_raw(path)
# read in as windows path, convert to posix string
return pathlib.PureWindowsPath(path_fixed).as_posix()
>>> fix_path("\\ftac\admin\rec\pir")
'/ftac/admin/rec/pir'
УХ ТЫ! Спасибо, Мэтт, не более ясно, честно говоря, мне было легче :) Большое спасибо за вашу помощь. Я попробовал то же самое с другим путем ("C:\Users\ftac\"), но теперь у меня (ошибка юникода) ошибка кодека 'unicodeescape', я увидел, что поставить r перед "..." исправить это, вы случайно не знаете, есть ли другой способ? заранее спасибо
"C:\Users\ftac\"
никогда не может быть интерпретирован как допустимая строка, как вы сказали, вам придется определить ее как необработанную строку r"C:\Users\ftac\"
. Как вы собираетесь заполнить исходные строки пути? Один из способов - просто не писать окончательный \, например. "C:\Users\ftac"
также ваша проблема здесь "\U"
- это еще один проблемный символ, который не может быть правильно проанализирован, вам нужно либо определить всю строку как необработанную строку в начале, либо вам нужно дважды экранировать все \ с \\
Отвечает ли это на ваш вопрос? Python заменяет обратную косую черту на косую черту