2017-02-02 5 views
1

Я относительно новичок в python и теперь имею следующую проблему. Начиная с недавнего времени, когда я генерирую или включаю путь в код, \ заменяется на \. Как, например, при использованииВ Python '' преобразуется в '\' даже с настройками rawstring или unicode

os.join 

или при использовании

r'mypat\myfiles\myfile.py' 

или

u'mypat\myfiles\myfile.py' 

работа вокруг я нашел для себя до сих пор использует «/» вместо «\», который сделал работу , Но теперь я хочу, чтобы вручную установить пакет и получаю ошибку

path wrong: C:\\Program Files\\Anaconda2\\pkgs\\... 

Я предполагаю, что его что-то в настройках либо на моем компьютере или основные параметры питона. Его Window 7 и я пробовали немецкий и английский язык с тем же результатом.

+0

'печать г» mypat \ myfiles \ myfile.py'' будет выводить только 1 '' \ ''. '' \\ ''- внутреннее строковое представление' '\''. – MYGz

ответ

2

os.path.join() является мультиплатформенной, если он используется в Windows, он будет генерировать окна путь с \, для Linux это будет генерировать путь Линукс с «/

Linux:

Python 3.6.0 (default, Dec 24 2016, 08:03:08) 
[GCC 6.2.1 20160830] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> os.path.join("toto", "tutu") 
'toto/tutu' 
>>> 

Windows:

λ python 
Python 3.5.3 (v3.5.3:1880cb95a742, Jan 16 2017, 16:02:32) [MSC v.1900 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> os.path.join("toto", "tutu") 
'toto\\tutu' 
>>> 

Вы никогда не должны использовать жесткий код в своем коде. Если ваше программное обеспечение мультиплатформенное, написать путь, используя стиль Линукса, а затем построить его с помощью os.path.join, он будет reformated

Иного пост, который может вас заинтересовать: mixed slashes with os.path.join on windows

+0

Thx. Итак, если я хочу использовать код, который использует os (и который я не могу изменить) на машине Windows, что я могу сделать, что это не toto \\ tutu, но toto \ tutu? – horseshoe

+0

toto \\ tutu действителен, toto \ tutu недействителен, toto/tutu действительно. Я всегда буду использовать «/». (не уверен, чтобы понять). Если вы действительно хотите иметь «\». я бы просто построил свой путь, а затем заменил «\\» или «/» на «\» – PyNico

+0

Спасибо, я думаю, что ссылка и ваши комментарии дали мне понять. Я думал, что проблема \\ заключалась в том, что код не смог найти путь, но я предполагаю, что мне нужно искать в другом месте. – horseshoe

2

Вы должны избавиться от них с дополнительной косой черты:

print('mypat\\myfiles\\myfile.py') 
+0

print (r'mypat \\ myfiles \\ myfile.py ') генерирует mypat \\ myfiles \\ myfile.py – horseshoe

+0

Но зачем вам нужно использовать строковое представление' r '? – lapinkoira

+0

@lapinokira: потому что print (r'mypat \ myfiles \ myfile.py ') также генерирует mypat \\ myfiles \\ myfile.py. – horseshoe