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