Форум сайта python.su
Всем привет! Подскажите, пожалуйста, как бороться с обратными слешами? Работаю на винде. У меня скрипт передает внешней программе путь к файлу в качестве параметра (через subprocess). Полюбому нужно двойные символы заменить еще до запуска той программы, потому что она их не понимает.
replace('\\\\','\\')
Отредактировано evgen34 (Март 31, 2013 00:22:33)
Офлайн
>>> import os >>> os.path.join('a', 'b', 'c') 'a/b/c' >>>
Офлайн
py.user.next, я не удивлюсь, что ты на линуксе это делаешь. У меня эта команда дает такой результат:
>>> os.path.join('a', 'b', 'c') 'a\\b\\c'
os.path.join(path)
>>>'Какой-то текст \\ со \\ слешами'.replace('\\','\') 'Какой-то текст \ со \ слешами'
Офлайн
эмм...
print 'a \\ b'.replace('\\\\', '\\')
a \ b
Отредактировано Viktors (Март 31, 2013 11:22:35)
Офлайн
как вариант, если хочется видеть не экранированые escape-последовательности, можно работать с "сырыми" строками. Там слеши не экранируются
In [1]: print "a \\ b"
a \ b
In [2]: print r"a \\ b"
a \\ b
In [3]: print r"a \ b"
a \ b
Отредактировано Viktors (Март 31, 2013 11:36:59)
Офлайн
Viktors, с функцией print() это работает, но таким способом в переменную не сохраняет
>>>f = 'a\\b' >>>print(f) 'a\b' >>>f 'a\\b' >>>d = f.replace('\\\\','\\') >>>print(d) 'a\b' >>>d 'a\\b'
Офлайн
да это тебе repl так показывает просто. На самом деле там один слэш
s = 'a\\b' print(s) a\b len(s) Out[3]: 3
Офлайн
sergeek, действительно, если программе передавать путь к файлу без ключа r'a\\b', то двойной слеш становится одним. Для проверки сделал скрипт на питоне:
from subprocess import call call('C:\test.exe '+'a\\b')
MsgBox(0,"Test backslash", $CmdLine[1])
a\b
Офлайн
evgen34надеюсь, ты не думаешь, что у тебя там двойные бекслеши
py.user.next, я не удивлюсь, что ты на линуксе это делаешь. У меня эта команда дает такой результат:
evgen34не для работы с папками и файлами, а для кроссплатформенной работы с путями файловой системы
Да и вообще, os.path.join - это для работы с папками, файлами
evgen34надо тебе почитать документацию про строковые литералы
Понятно, что такое не сработает
Офлайн
Документация классная, мне не лень ее прочитать, когда появляется необходимость. Благодарю за заботу, замечание “надо тебе почитать документацию” очень ценное. Только не все в этой документации понятно (я про английский), не все переведено на русский. Форум для того и нужен, чтобы люди помогли решить вопросы, на которые самостоятельно ответить не получается. А сообщения “тебе надо что-то почитать” только засоряют форум. Не в обиду, просто если помогаешь, то помогай, а не делай вид. Мой поинт такой.
Офлайн