programing

목록의 Python os.path.join()

lastmoon 2023. 7. 21. 21:52
반응형

목록의 Python os.path.join()

할수있어

>>> os.path.join("c:/","home","foo","bar","some.txt")
'c:/home\\foo\\bar\\some.txt'

하지만, 내가 할 때.

>>> s = "c:/,home,foo,bar,some.txt".split(",")
>>> os.path.join(s)
['c:/', 'home', 'foo', 'bar', 'some.txt']

내가 여기서 뭘 놓쳤지요?

문제는,os.path.join조금도 필요 없습니다list인수로서, 그것은 별도의 인수여야 합니다.

필요한 별도의 인수로 목록을 압축 해제합니다.join(그리고 기록을 위해: 목록은 다음을 사용하여 문자열에서 얻었습니다.split), - 또는 '스플랫' 연산자를 사용합니다.

>>> s = "c:/,home,foo,bar,some.txt".split(",")
>>> os.path.join(*s)
'c:/home\\foo\\bar\\some.txt'

가정하면join그런 방식으로 설계되지 않았습니다(ATOz로 말하자면).TOA가 지적함), 그리고 그것은 단지 두 개의 매개 변수를 필요로 했고, 당신은 여전히 내장된 것을 사용할 수 있었습니다.reduce:

>>> reduce(os.path.join,["c:/","home","foo","bar","some.txt"])
'c:/home\\foo\\bar\\some.txt'

다음과 같은 출력:

>>> os.path.join(*["c:/","home","foo","bar","some.txt"])
'c:/home\\foo\\bar\\some.txt' 

단지 완전성과 교육적인 이유로 (그리고 다른 상황에서)*작동하지 않음).

파이썬 3에 대한 힌트

reduce로 이동했습니다.functools모듈.

저는 목록이 비어 있을 수도 있는 상황에 걸려 넘어졌습니다.이 경우:

os.path.join('', *the_list_with_path_components)

첫 번째 인수를 기록합니다. 그러면 결과가 변경되지 않습니다.

그냥 방법일 뿐입니다.당신은 아무것도 놓치지 않았어요.공식 설명서에 따르면 목록 압축 풀기를 사용하여 여러 경로를 제공할 수 있습니다.

s = "c:/,home,foo,bar,some.txt".split(",")
os.path.join(*s)

참고:*s정의 대신에sos.path.join(*s)별표를 사용하면 목록의 압축이 해제됩니다. 즉, 각 목록 인수가 별도의 인수로 함수에 제공됩니다.

이것은 기능적 프로그래밍 관점에서 생각하고 싶다면 간단한 맵 축소 작업이라고도 생각할 수 있습니다.

import os
folders = [("home",".vim"),("home","zathura")]
[reduce(lambda x,y: os.path.join(x,y), each, "") for each in folders]

reduce는 Python 2.x에 내장되어 있습니다.Python 3.x에서는 다음으로 이동되었습니다.itertools하지만 받아들여진 답이 더 좋습니다.

아래와 같이 답변하였으나 가입해야 할 항목의 목록이 있는지 답변합니다.

언급URL : https://stackoverflow.com/questions/14826888/python-os-path-join-on-a-list

반응형