Почему «C:» не означает то, что я думаю?

В Windows 7 я запускаю оболочку IDLE Python 2.7.5:

>>> import os
>>> os.getcwd()
'C:\\Python27'
>>> os.path.relpath('C:\\')
'..'
>>> os.path.relpath('C:')
'.'
>>> os.chdir('C:')
>>> os.getcwd()
'C:\\Python27'

Что происходит, и почему это должно быть так сложно?


person Scruffy    schedule 08.09.2013    source источник
comment
Все это имеет смысл. C: без обозначения пути представляет текущий каталог на диске C:. Таким образом, относительный путь равен ., так как вы находитесь на диске C:. А так как вы находитесь на диске C:\\Python27, то относительный путь к C:\` is ...`.   -  person lurker    schedule 08.09.2013
comment
Это восходит к дням DOS, когда cd X: переводил вас в последний каталог, в котором вы были в X:, не обязательно в корневой каталог X:.   -  person Kirk Strauser    schedule 08.09.2013


Ответы (2)


В Windows поведение может быть немного странным — оно ведет себя по-разному, если вы запускаете Python из cmd.exe или запускаете его напрямую (не через cmd.exe). Как было указано, правильная команда - os.chdir('c:\\'). этот ответ содержит более подробную информацию.

person Mike Vella    schedule 08.09.2013

Вы пытаетесь перейти не в реальную папку, а в «c:», правильная команда будет

import os 
os.chdir('c:\\')

И это будет работать нормально. Причина двойной обратной косой черты заключается в том, чтобы избежать обратной косой черты (которая работает как управляющий символ).

person Tymoteusz Paul    schedule 08.09.2013
comment
Хорошо, но почему так устроено? Для меня «c:» означает корневую папку «c:\». Есть ли веская причина, по которой «c:» все еще «находится» в определенной папке. Все ли диски всегда имеют «cwd»? - person Scruffy; 08.09.2013
comment
@Scruffy, это звучит как невероятная вещь для вас, чтобы проверить (и это легко, в целом это веселое упражнение, я обещаю!). Что касается того, почему, это пережиток, унаследованный окнами от очень старых времен. - person Tymoteusz Paul; 08.09.2013
comment
@Scruffy Как я объясняю в своем ответе, это зависит от того, как вы запускаете Python. - person Mike Vella; 08.09.2013
comment
@Scruffy: для меня «c:» означает корневую папку «c:\». -- но вы не изобретали DOS, так что это не ваше дело ;-) Когда Python работает в Windows, он гарантирует, что пути, начинающиеся с C:, означают в Python то же самое, что и в Windows. - person Steve Jessop; 08.09.2013
comment
Да, на всех дисках всегда есть текущая директория. (Ну, для всех эффектов и целей.) Это замечательно полезно в командной строке. - person Harry Johnston; 11.09.2013