문자열 연결 대신 os.path.join을 사용하는 이유는 무엇입니까?


답변:


85

가지고 다닐 수 있는

파일 경로 조작을 한 번 작성 하면 다양한 플랫폼에서 무료로 작동합니다. 구분 문자가 추상화되어 작업이 더 쉬워집니다.

똑똑한

더 이상 해당 디렉토리 경로에 슬래시 가 있는지 여부에 대해 걱정할 필요가 없습니다 . os.path.join필요한 경우 추가합니다.

맑은

을 사용 os.path.join하면 파일 경로로 작업중인 코드를 다른 사람들에게 분명하게 알 수 있습니다. 사람들은 코드를 빠르게 스캔하고 본질적으로 파일 경로임을 발견 할 수 있습니다. 직접 구성하기로 결정하면 독자가 코드의 실제 문제를 찾는 데 방해가 될 수 있습니다. "흠, 일부 문자열 연결, 대체.이 파일 경로 또는 무엇입니까? Gah! 왜 그가 사용하지 않았 os.path.join습니까?" :)


3
감사. Smart and Clear 부품은 제가 똑같은 질문을 할 때 찾던 것과 정확히 일치합니다. 휴대용 부품은 Windows 전용 "\"대신 "/"를 연결하여 쉽게 얻을 수 있으므로 일종의 논란입니다.
Léo Germond

3
포인트 3에는 장점이 있지만 1과 2는 논쟁의 여지가 있습니다. / Windows에서 작동합니다. 지원하지 않는 OS는 무엇입니까? 그리고 이중 후행 슬래시는 OS / FS에 의해 정규화됩니다. 을 사용하지 않는다는 말은 아니지만 사용하는 os.path.join경우 올바른 이유로 사용하십시오. os.path.join 주변에는 많은화물 컬트가 있습니다. "어리석은 일관성은 작은 마음의 홉 고블린입니다."
hraban

5

'\'가있는 Windows 및 '/'가있는 Unix (Mac OS X 포함)에서 작동합니다.

posixpath의 경우 여기에 간단한 코드가 있습니다.

In [22]: os.path.join??
Type:       function
String Form:<function join at 0x107c28ed8>
File:       /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py
Definition: os.path.join(a, *p)
Source:
def join(a, *p):
    """Join two or more pathname components, inserting '/' as needed.
    If any component is an absolute path, all previous path components
    will be discarded."""
    path = a
    for b in p:
        if b.startswith('/'):
            path = b
        elif path == '' or path.endswith('/'):
            path +=  b
        else:
            path += '/' + b
    return path

창문은 없지만 '\'가 있어야합니다.


5
이상하게도하지만, 사용 /CPython과와 윈도우, ...에 작품
에릭 O Lebigot

1
이. 당신을 위해 설계된 기능이있을 때 경로 구분 기호 등을 직접 처리하려고하는 이유는 무엇입니까?
Blair

1
나는 코멘트를 읽고 그것은 함께 길을 연결합니다. 나는 그것을 왜 사용하는지 알 수 없습니다. 분명히 더 큰 그림을 볼 수 없다고 말한 것처럼 사과드립니다.
user1905410 dec.

@ user1905410 Fine Documentation에서 다루는 것처럼 그 이상을 수행합니다.

@ user1905410 Fine Documentation에서 다루는 것처럼 그 이상을 수행합니다.

0

OS 독립적입니다. 경로를 C : \ Whatever로 하드 코딩하면 Windows에서만 작동합니다. Unix 표준 "/"로 하드 코딩하면 Unix에서만 작동합니다. os.path.join은 실행중인 운영 체제를 감지하고 올바른 기호를 사용하여 경로를 결합합니다.


7
If you hardcode them with the Unix standard "/" they will only work on Unix.그건 틀렸어요. "/"는 Windows 및 linux / unix / bsd / darwin에서 잘 작동합니다.
Léo Germond
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.