os.path.split
문자열을 재귀 적으로 사용할 수 있습니다
import os
def parts(path):
p,f = os.path.split(path)
return parts(p) + [f] if f else [p]
일부 경로 문자열에 대해 이것을 테스트하고 다음을 사용하여 경로를 다시 어셈블하십시오. os.path.join
>>> for path in [
... r'd:\stuff\morestuff\furtherdown\THEFILE.txt',
... '/path/to/file.txt',
... 'relative/path/to/file.txt',
... r'C:\path\to\file.txt',
... r'\\host\share\path\to\file.txt',
... ]:
... print parts(path), os.path.join(*parts(path))
...
['d:\\', 'stuff', 'morestuff', 'furtherdown', 'THEFILE.txt'] d:\stuff\morestuff\furtherdown\THEFILE.txt
['/', 'path', 'to', 'file.txt'] /path\to\file.txt
['', 'relative', 'path', 'to', 'file.txt'] relative\path\to\file.txt
['C:\\', 'path', 'to', 'file.txt'] C:\path\to\file.txt
['\\\\', 'host', 'share', 'path', 'to', 'file.txt'] \\host\share\path\to\file.txt
드라이브 문자, UNC 경로 및 절대 및 상대 경로를 처리하려는 방법에 따라 목록의 첫 번째 요소를 다르게 처리해야 할 수도 있습니다. 마지막 [p]
을 변경하면 [os.path.splitdrive(p)]
드라이브 문자와 디렉토리가 튜플로 분리되어 문제가 발생합니다.
import os
def parts(path):
p,f = os.path.split(path)
return parts(p) + [f] if f else [os.path.splitdrive(p)]
[('d:', '\\'), 'stuff', 'morestuff', 'furtherdown', 'THEFILE.txt']
[('', '/'), 'path', 'to', 'file.txt']
[('', ''), 'relative', 'path', 'to', 'file.txt']
[('C:', '\\'), 'path', 'to', 'file.txt']
[('', '\\\\'), 'host', 'share', 'path', 'to', 'file.txt']
편집 : 나는이 답변이 user1556435에 의해 위에서 주어진 것과 매우 유사하다는 것을 깨달았습니다 . 경로의 드라이브 구성 요소 처리가 다르기 때문에 대답을 남기고 있습니다.
os.path.split
할 때 해당 문자열을 제대로 이스케이프하지 않으므로 제대로 작동하지 않습니다.