Я написал код на Python, который использует /, чтобы сделать определенный файл в папке, если я хочу использовать код в Windows, он не будет работать, есть ли способ, с помощью которого я могу использовать код в Windows и Linux.
В Python я использую этот код:
pathfile=os.path.dirname(templateFile)
rootTree.write(''+pathfile+'/output/log.txt')
Когда я буду использовать свой код в предположении, что машина Windows, мой код не будет работать.
Как использовать "/" (разделитель каталогов) в Linux и Windows?
Используйте os.path.join()
.
Пример: os.path.join(pathfile,"output","log.txt")
.
В вашем коде, который будет: rootTree.write(os.path.join(pathfile,"output","log.txt"))
os.path.join
использует более сложную логику для сопоставления нескольких относительных компонентов пути. Когда вы просто хотите os.sep.join
их, os.sep.join
- правильный выбор.
Использование:
import os
print os.sep
чтобы увидеть, как разделитель смотрит на текущую ОС.
В коде вы можете использовать:
import os
path = os.path.join('folder_name', 'file_name')
Вы можете использовать os.sep:
>>> import os
>>> os.sep
'/'
os.path.normpath(pathname)
также следует упомянуть, поскольку он преобразует разделители /
path в разделители \
в Windows. Это также сворачивает избыточные ссылки верхнего уровня... то есть, A/B
и A/foo/../B
и A/./B
все становятся A/B
И если вы Windows, все они становятся A\B
os.path.normpath('a/b/c/d/file.ext')
чем os.path.join('a','b','c','d','file.ext')
когда мне нужно указать длинный путь.
os.path.join
просто присоединяется os.path.join
всему предоставленному. например, join("a/b", "c\d")
дает a/b\c\d
(в окнах). Но я могу получить ожидаемый результат с правильной комбинацией join
и normpath
, например, a\b\c\d
(на окнах)
Некоторые полезные ссылки, которые помогут вам:
sep
но не смог удержаться, чтобы опубликовать это тоже (я предполагал, что OP найдет его полезным для будущей работы) :)
Если вам посчастливилось запустить 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
Сделайте import os
, а затем используйте os.sep
Вы можете использовать "os.sep"
import os
pathfile=os.path.dirname(templateFile)
directory = str(pathfile)+os.sep+'output'+os.sep+'log.txt'
rootTree.write(directory)
Не создавайте имена каталогов и файлов самостоятельно, используйте библиотеки, включенные в python.
В этом случае соответствующий os.path. Особенно присоединяется создание нового пути из каталога и имени файла или каталога, а также разделение, которое получает имя файла из полного пути.
Ваш пример будет
pathfile=os.path.dirname(templateFile)
p = os.path.join(pathfile, 'output')
p = os.path.join( p, 'log.txt')
rootTree.write(p)