2013-08-07 3 views
0

У меня есть путь к файлу, содержащему знаки $, которые я сбежал с \, так open() может обрабатывать путь. Но теперь открываются автоматически \$ на \\$. Например:python open() escape обратная косая черта

open("/home/test/\$somedir\$/file.txt", "r") 
result in an error message 

IOError: [Errno 2] No such file or directory: '/home/test/\\$somedir\\$/file.txt' 

Могу ли я подавить это. Почему open() сделать это? Я не могу найти ничего в документе open, который описывает это.

+0

$ не нужно ускользать. – njzk2

ответ

1

open()не сделать это. Это Python, который ускользает специальные символы, представляя строку:

>>> path = '\$' 
>>> path 
'\\$' 
>>> print path 
\$ 

В обычных строках Python буквальной, а \ имеет особое значение, поэтому он бежал, когда вторя назад значение, которое может быть вставлено обратно в сценарий Python или сеанс интерпретатора для воссоздания одного и того же значения.

В Linux или Mac вы обычно делаете не необходимо избежать значения $ в имени файла; $ не имеет особого смысла в обычной строке Python, ни в большинстве Linux или Mac имен файлов:

>>> os.listdir('/tmp/$somedir$') 
['test'] 
>>> open('/tmp/$somedir$/test') 
<open file '/tmp/$somedir$/test', mode 'r' at 0x105579390> 
+0

Возможно, я что-то пропустил: я пробовал следующее: open ("/ test/$ somedir $/file.txt", "r") -> не работает open (r "/ test/$ somedir $/file.txt "," r ") -> не работает open ("/test/\ $ somedir \ $/file.txt "," r ") -> не работает open (r" /test/\$somedir\$/file.txt "," r ") -> не работает – Mentirosso

+0

' $ 'is * not * escape-код в строках Python, поэтому использование строкового строкового литерала ничего не изменит , Что означает 'os.listdir ('/ test')' говорит вам, что каталог назван? Если это * * '$ somedir $', то что говорит 'os.lisdir ('/ test/$ somedir $')' в этом каталоге? –

+0

os.listdir ('/ test') показывает мне $ somedir $, но os.listdir ('/ test/$ somedir $') снова появляется в OSError: [Errno 2] Нет такого файла или каталога: ... – Mentirosso

0

Попробуйте использовать буквальное представление строки добавления r перед переменной строкой, чтобы избежать иметь дело с более сложными усиками ситуациями, например:

print 'C:\test' 
#C:  est 

print r'C:\test' 
#C:\test 

, где \t интерпретируется как tab.

Смежные вопросы