Str.заменить обратную косую черту косой чертой

Я хотел бы заменить обратную косую черту \ в пути 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 удаляется.

Отвечает ли это на ваш вопрос? Python заменяет обратную косую черту на косую черту

luk2302 25.11.2022 15:28

Вы также можете попробовать import os ---> path = path.replace(os.sep, "/")

Bhargav - Retarded Skills 25.11.2022 15:36

попробовал оба метода, но первая двойная обратная косая черта становится одинарной, а также \a был удален из пути

Joss Fres 25.11.2022 15:40
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

О боже, это немного сложнее, чем кажется на первый взгляд.

Ваша проблема в том, что вы сохранили свои пути 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 перед "..." исправить это, вы случайно не знаете, есть ли другой способ? заранее спасибо

Joss Fres 25.11.2022 16:06
"C:\Users\ftac\" никогда не может быть интерпретирован как допустимая строка, как вы сказали, вам придется определить ее как необработанную строку r"C:\Users\ftac\". Как вы собираетесь заполнить исходные строки пути? Один из способов - просто не писать окончательный \, например. "C:\Users\ftac"
Matt 25.11.2022 16:08

также ваша проблема здесь "\U" - это еще один проблемный символ, который не может быть правильно проанализирован, вам нужно либо определить всю строку как необработанную строку в начале, либо вам нужно дважды экранировать все \ с \\

Matt 25.11.2022 16:12

Другие вопросы по теме