목록의 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
정의 대신에s
에os.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
'programing' 카테고리의 다른 글
엔티티 그룹 기준(OUTER APPLY)에 대한 링크 "oracle 11.2.0.3.0은 적용을 지원하지 않습니다." (0) | 2023.07.21 |
---|---|
Oracle에 대해 실행된 쿼리를 보려면 어떻게 해야 합니까? (0) | 2023.07.21 |
열 이름을 기준으로 여러 열 삭제 (0) | 2023.07.21 |
사전을 만들 때 장고 모델에게 전달할 수 있습니까? (0) | 2023.07.21 |
Python 단위 테스트에서 메서드가 호출되었다고 주장합니다. (0) | 2023.07.21 |