Python에서 Linux와 Windows 모두에서 "/"(디렉토리 구분 기호)를 사용하는 방법은 무엇입니까?


191

폴더에서 특정 파일을 만들기 위해 /를 사용하는 코드를 파이썬으로 작성했습니다 .Windows에서 코드를 사용하려는 경우 작동하지 않습니다 .Windows 및 Linux에서 코드를 사용할 수있는 방법이 있습니까?

파이썬에서는이 코드를 사용하고 있습니다 :

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

Windows 컴퓨터에서 코드를 사용하면 코드가 작동하지 않는다고 가정합니다.

Linux와 Windows에서 "/"(디렉토리 구분 기호)를 어떻게 사용합니까?


1
Win / * nix에 따라 처음에 정의한 다음 변수로 작업 할 수 있습니다.
fedorqui 'SO 중지 피해'

12
Windows에서는 \ 또는 /를 디렉토리 구분 기호로 사용할 수 있습니다.
SecurityMatt

12
Windows는 /디렉토리 경로를 지원 합니다. 어떤 특정한 문제가 있습니까? 문제를 설명하는 코드를 게시하십시오.
Michael Geary

Windows 사용자 공간 프로그램에 의존하지 않는 한 슬래시와 역 슬래시가 작동합니다. 그러나 일부 cmd 명령에는 문제가 있습니다.
Pihhan

1
@Mehrdad : Win32 API가 '/'를 허용하지 않는 예를 알고 있습니까? (cmd.exe 및 기타 프로그램을 포함하지 않음)
Eryk Sun

답변:


268

사용하십시오 os.path.join(). 예 : os.path.join(pathfile,"output","log.txt").

코드에서 다음과 같습니다. rootTree.write(os.path.join(pathfile,"output","log.txt"))


9
os.path.join더 복잡한 논리를 사용하여 여러 상대 경로 구성 요소를 함께 일치시킵니다. 당신이 그들을 연결하고 싶을 때 os.sep.join, 올바른 선택입니다.
Bachsau

108

사용하다:

import os
print os.sep

현재 OS에서 구분 기호가 어떻게 보이는지 확인하십시오.
코드에서 다음을 사용할 수 있습니다.

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


39

os.path.normpath(pathname)Windows 에서는 /경로 구분 기호를 \구분 기호로 변환하므로 언급해야합니다 . 또한 중복 상위 수준 참조 ... 예를 축소, A/B그리고 A/foo/../B그리고 A/./B모두가 A/B. 그리고 당신이 Windows라면, 이것들은 모두가 A\B됩니다.


3
이것은 "Linux와 Windows에서"/ "(디렉토리 구분 기호)를 사용하는 방법"이라는 문구에 대한 질문에 대한 최상의 답변입니다. 그리고 그것은 또한 매우 유용 합니다. 긴 경로를 지정해야 할 os.path.normpath('a/b/c/d/file.ext')때보 다 훨씬 낫습니다 os.path.join('a','b','c','d','file.ext').
ukrutt

또한이 답변이 매우 유용하다는 것을 알았습니다. 일관된 구분 기호로 경로를 생성하는 방법을 찾고있었습니다. 유명한 os.path.join것은 제공된 모든 것에 합류합니다. 예를 들면 join("a/b", "c\d")제공 a/b\c\d(Windows의 경우). 하지만 난 적절한 조합으로 예상 된 결과를 얻을 수 있습니다 joinnormpatha\b\c\d(Windows의 경우)
Sumudu

17

운 좋게도 Python 3.4+를 실행하려면 다음을 사용할 수 있습니다 pathlib.

from pathlib import Path

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

또는 동등하게

path = Path(dir) / subdir / filename

16

도움이되는 유용한 링크 :


2
패스 셉? 일반적으로 유용하지만 여기서는 아닙니다.
glglgl

2
@glglgl 실제로. 내가 찾았 sep지만 나 자신도이 게시 저항 할 수 없었다 :) (나는 영업 이익은 미래의 작업에 유용하다고합니다 가정)
Maroun


8

" os.sep "를 사용할 수 있습니다

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

4

디렉토리와 파일 이름을 직접 작성하지 마십시오. 파이썬에 포함 된 라이브러리를 사용하십시오.

이 경우 관련된 것은 os.path 입니다. 특히 join은 디렉토리와 파일 이름 또는 디렉토리에서 새 경로 이름을 만들고 전체 경로에서 파일 이름을 가져 오는 split입니다.

당신의 예는

pathfile=os.path.dirname(templateFile)
p = os.path.join(pathfile, 'output')
p = os.path.join( p, 'log.txt')
rootTree.write(p)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.