Python os.path.join в Windows

Я пытаюсь изучить python и создаю программу, которая выведет скрипт. Я хочу использовать os.path.join, но я довольно смущен. Согласно документам, если я скажу:

os.path.join('c:', 'sourcedir') 

Я получаю "C:sourcedir" . Согласно документам, это нормально, не так ли?

Но когда я использую команду copytree, Python выводит ее желаемым образом, например:

 import shutil src = os.path.join('c:', 'src') dst = os.path.join('c:', 'dst') shutil.copytree(src, dst) 

Вот код ошибки, который я получаю:

 WindowsError: [Ошибка 3] Система не может найти указанный путь: 'C: src /*.*'

Если я os.path.join с помощью os.path.normpath я получаю ту же ошибку.

Если этот os.path.join нельзя использовать таким образом, то я смущен относительно его цели.

Согласно страницам, предложенным Stack Overflow, косые черты не должны использоваться в соединении – это правильно, я полагаю?

  • Измените GPU по умолчанию в TensorFlow
  • Работа с большими данными в python и numpy, не хватает RAM, как сохранить частичные результаты на диске?
  • Python: найдите подстроку в строке и верните индекс подстроки
  • Как переместить сервер SimpleSocket в фоновый процесс
  • Постоянно добавлять каталог в PYTHONPATH
  • Как изменить страницу уже открытого pdf в python
  • SQLAlchemy Column to Row Transformation и наоборот - возможно ли это?
  • Преобразование кортежа в словарь
  • 7 Solutions collect form web for “Python os.path.join в Windows”

    Windows имеет концепцию текущего каталога для каждого диска. Из-за этого "c:sourcedir" означает «sourcedir» внутри текущего каталога C: и вам нужно указать абсолютный каталог.

    Любой из них должен работать и давать тот же результат, но в настоящий момент у меня нет Windows VM, чтобы дважды проверить:

     "c:/sourcedir" os.path.join("/", "c:", "sourcedir") os.path.join("c:/", "sourcedir") 

    Чтобы быть более педантичным, наиболее согласованный ответ python doc был бы следующим:

     mypath = os.path.join('c:', os.sep, 'sourcedir') 

    Поскольку вам также нужен os.sep для корса корня posix:

     mypath = os.path.join(os.sep, 'usr', 'lib') 

    Причина os.path.join('C:', 'src') не работает так, как вы ожидаете, из-за чего-то в документации, к которой вы привязались:

    Обратите внимание, что в Windows, поскольку для каждого диска существует текущий каталог, os.path.join («c:», «foo») представляет собой путь относительно текущего каталога на диске C: (c: foo), а не c : \ Foo.

    Как сказал ghostdog, вы, вероятно, хотите mypath=os.path.join('c:\\', 'sourcedir')

    Чтобы быть педантичным, это, вероятно, не очень хорошо для hardcode либо / или \ как разделитель путей. Может быть, это было бы лучше?

     mypath = os.path.join('c:%s' % os.sep, 'sourcedir') 

    или

     mypath = os.path.join('c:' + os.sep, 'sourcedir') 

    присоединиться к пути Windows, попробуйте

     mypath=os.path.join('c:\\', 'sourcedir') 

    в основном, вам нужно будет избежать косой черты

    Я бы сказал, что это (windows) ошибка python.

    Почему ошибка?

    Я думаю, что это утверждение должно быть True

     os.path.join(*os.path.dirname(os.path.abspath(__file__)).split(os.path.sep))==os.path.dirname(os.path.abspath(__file__)) 

    Но это False на машинах Windows.

    Согласие с @ georg-

    Я бы сказал тогда, почему нам нужен хромой os.path.join – лучше использовать str.join или str.join например

     sys.path.append('{0}'.join(os.path.dirname(__file__).split(os.path.sep)[0:-1]).format(os.path.sep)) 
    Python - лучший язык программирования в мире.