Как использовать «/» (разделитель каталогов) в Linux и Windows в Python?

123

Я написал код на Python, который использует /, чтобы сделать определенный файл в папке, если я хочу использовать код в Windows, он не будет работать, есть ли способ, с помощью которого я могу использовать код в Windows и Linux.

В Python я использую этот код:

pathfile=os.path.dirname(templateFile)
rootTree.write(''+pathfile+'/output/log.txt')

Когда я буду использовать свой код в предположении, что машина Windows, мой код не будет работать.

Как использовать "/" (разделитель каталогов) в Linux и Windows?

  • 1
    Вы можете определить его в начале в зависимости от Win / * nix, а затем работать с переменной.
  • 10
    В Windows вы можете использовать \ или / в качестве разделителя каталогов.
Показать ещё 10 комментариев
Теги:

9 ответов

201
Лучший ответ

Используйте os.path.join(). Пример: os.path.join(pathfile,"output","log.txt").

В вашем коде, который будет: rootTree.write(os.path.join(pathfile,"output","log.txt"))

  • 0
    Этот работает!
  • 1
    os.path.join использует более сложную логику для сопоставления нескольких относительных компонентов пути. Когда вы просто хотите os.sep.join их, os.sep.join - правильный выбор.
73

Использование:

import os
print os.sep

чтобы увидеть, как разделитель смотрит на текущую ОС.
В коде вы можете использовать:

import os
path = os.path.join('folder_name', 'file_name')
47

Вы можете использовать os.sep:

>>> import os
>>> os.sep
'/'
26

os.path.normpath(pathname) также следует упомянуть, поскольку он преобразует разделители / path в разделители \ в Windows. Это также сворачивает избыточные ссылки верхнего уровня... то есть, A/B и A/foo/../B и A/./B все становятся A/B И если вы Windows, все они становятся A\B

  • 2
    Это IMO лучший ответ на вопрос, как он был сформулирован, «как использовать« / »(разделитель каталогов) как в Linux, так и в Windows». И это также чрезвычайно полезно - я бы предпочел сделать os.path.normpath('a/b/c/d/file.ext') чем os.path.join('a','b','c','d','file.ext') когда мне нужно указать длинный путь.
  • 0
    Я также нашел этот ответ очень полезным. Я искал метод для генерации путей с последовательным разделителем. Знаменитый os.path.join просто присоединяется os.path.join всему предоставленному. например, join("a/b", "c\d") дает a/b\c\d (в окнах). Но я могу получить ожидаемый результат с правильной комбинацией join и normpath , например, a\b\c\d (на окнах)
13

Некоторые полезные ссылки, которые помогут вам:

  • 0
    pathsep? Вообще полезно, но не здесь, ИМО.
  • 2
    @glglgl Действительно. Я искал sep но не смог удержаться, чтобы опубликовать это тоже (я предполагал, что OP найдет его полезным для будущей работы) :)
8

Если вам посчастливилось запустить Python 3. 4+, вы можете использовать pathlib:

from pathlib import Path

path = Path(dir, subdir, filename)  # returns a path of the system path flavour

или, что эквивалентно,

path = Path(dir) / subdir / filename
6

Сделайте import os, а затем используйте os.sep

5

Вы можете использовать "os.sep"

 import os
 pathfile=os.path.dirname(templateFile)
 directory = str(pathfile)+os.sep+'output'+os.sep+'log.txt'
 rootTree.write(directory)
4

Не создавайте имена каталогов и файлов самостоятельно, используйте библиотеки, включенные в python.

В этом случае соответствующий os.path. Особенно присоединяется создание нового пути из каталога и имени файла или каталога, а также разделение, которое получает имя файла из полного пути.

Ваш пример будет

pathfile=os.path.dirname(templateFile)
p = os.path.join(pathfile, 'output')
p = os.path.join( p, 'log.txt')
rootTree.write(p)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню