파이썬의 Windows 경로


152

예를 들어 Windows 디렉토리를 나타내는 가장 좋은 방법은 무엇입니까 "C:\meshes\as"? 스크립트를 수정하려고 시도했지만 디렉토리를 올바르게 가져올 수 없어서 작동하지 않습니다. '\'이스케이프 문자로 작동 한다고 가정 합니까?

답변:


220

당신은 항상 사용할 수 있습니다 :

'C:/mydir'

이것은 리눅스와 윈도우 모두에서 작동합니다. 다른 가능성은

'C:\\mydir'

일부 이름에 문제가 있으면 원시 문자열 리터럴을 사용해 볼 수도 있습니다.

r'C:\mydir'

그러나 모범 사례는 os.path항상 OS에 대한 올바른 구성을 선택하는 모듈 기능 을 사용하는 것입니다.

os.path.join(mydir, myfile)

파이썬 3.4에서 pathlib 모듈을 사용할 수도 있습니다 . 이것은 위와 동일합니다.

pathlib.Path(mydir, myfile)

또는

pathlib.Path(mydir) / myfile

2
@Gareth, 나는 매우 게으 르며 종종 '/'를 사용하여 나를 발견했습니다. 그러나 장기적으로 os.path를 사용하는 것이 더 편리합니다. 또한 mydir 및 myfile을 쉽게 수정할 수있는 변수로 사용할 수 있습니다.
joaquin

13
원시 문자열에 그들이 \로 끝나지 수 있다는 것입니다와 함께 유일한 것은 조심해야합니다
더글러스 Leeder 씨

os.path.join ()을 사용하여 \로 경로를 종료 할 필요가 없습니다.
Will Ediger

1
나는 r (원시 문자열) 구문을 좋아합니다. 일반적으로 모든 백 슬래시를 슬래시로 바꿔야하는 긴 경로를 복사하는 경우 유용합니다
peterb

원시 문자열은 \\로 끝날 수 있으므로 파일을 다음 경로에 연결할 수 있습니다. codecs.open (r "C : \ maXbox \ EKON24 \ tweet_data \\"+ file, 'r', encoding = 'utf-8') f :
Max Kleiner

20

os.path모듈을 사용하십시오 .

os.path.join( "C:", "meshes", "as" )

또는 원시 문자열을 사용하십시오.

r"C:\meshes\as"

경로 나 파일 이름에 공백을 두지 않는 것이 좋습니다. 그리고 문자열에 이중 백 슬래시를 사용할 수 있습니다.

"C:\\meshes\\as.jpg"

11
구성 요소가 드라이브 문자 일 때 os.path.join은 예상대로 작동하지 않을 수 있습니다. 상대 경로는 그때도 허용되기 때문입니다. (첫 번째 줄의 결과는 Windows에서 'C : meshes \\ as'입니다.)
dash-tom-bang

@ dash-tom-bang의 의견은 정말 중요합니다. "C:\"첫 번째 항목 으로 넣는 것이 옳은 일 입니까? 그게 청결의 일부를 엉망으로 join만드는가?
잭 오코너

1
@ JackO'Connor 그것이 내가하는 일입니다. 당신은 확실히 "C:\"파일 이름의 중간에 넣기 를 원하지 않습니다 . 또한 os.path.normpath조인 전후에 경로를 멋지게 인쇄 할 수 있습니다 .
Agostino

그러나 그것은 작동하지 않습니다. 작동 os.path.join( "C:\\", "meshes", "as" )
원리

17

예, \파이썬에서 문자열 리터럴은 이스케이프 시퀀스의 시작을 나타냅니다. 경로에 유효한 두 문자 이스케이프 시퀀스 가 있으며 ASCII Bell 인 문자 \a로 축소됩니다 .

>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess

다른 일반적인 이스케이프 시퀀스에는 \t(탭), \n(줄 바꿈), \r(캐리지 리턴)이 포함됩니다.

>>> list('C:\test')
['C', ':', '\t', 'e', 's', 't']
>>> list('C:\nest')
['C', ':', '\n', 'e', 's', 't']
>>> list('C:\rest')
['C', ':', '\r', 'e', 's', 't']

보시다시피,이 모든 예에서 리터럴의 백 슬래시와 다음 문자는 함께 그룹화되어 최종 문자열에 단일 문자를 형성합니다. 파이썬 이스케이프 시퀀스의 전체 목록은 here 입니다.

이를 처리하는 다양한 방법이 있습니다.

  1. 파이썬은 r또는 접두사가 붙은 문자열 리터럴에서 이스케이프 시퀀스를 처리하지 않습니다R .

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
  2. Windows의 Python도 슬래시를 처리해야합니다.

  3. 당신은 사용할 수 있습니다 os.path.join...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
  4. ... 또는 최신 pathlib모듈

    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')

-1

PowerShell 사용

Windows에서는 PowerShell 을 명령 줄 인터페이스로 사용하는 한/ 모든 장소에서 Linux 또는 macOS처럼 경로에서 사용할 수 있습니다 . 그것은 온다 미리 설치된 Windows에서 그리고 많은 지원하는 리눅스 명령 과 같은 명령을 사용합니다.ls

Windows 명령 프롬프트 ( cmdWindows 시작 메뉴에 입력 할 때 나타나는 프롬프트)를 사용하는 경우 \그 안에 경로를 지정해야 합니다. /다른 모든 장소 (코드 편집기, Python 대화식 모드 등)에서 경로를 사용할 수 있습니다 .


-1

다른 소스 (예 : 파일 탐색기)에서 Windows 경로를 붙여 넣으려면 input()Python 콘솔에서 호출을 통해 수행 할 수 있습니다 .

>>> input()
D:\EP\stuff\1111\this_is_a_long_path\you_dont_want\to_type\or_edit_by_hand
'D:\\EP\\stuff\\1111\\this_is_a_long_path\\you_dont_want\\to_type\\or_edit_by_hand'

그런 다음 결과를 복사하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.