如何将像r'C:UsersusernDocumentsfile.txt'
这样的路径转换为像['C:', 'Users', 'usern', 'Documents', 'file.txt']
这样的列表?我希望它在 Windows 上跨平台工作,无论路径是用正斜杠还是反斜杠给出的,还是两者的混合,也无论输入字符串是否以斜杠结尾(即,对于像'C:\Users\usern\Documents\'
这样的输入,末尾没有空字符串(。
据我所知,以下内容应该适用于Windows,Mac和Linux:
import sys
def path_to_list(s):
if sys.platform == 'win32':
return s.replace('\', '/').rstrip('/').split('/')
else:
return s.rstrip('/').split('/')
但我不确定这是否适用于可以运行 Python 的其他平台,也不确定这个解决方案对于这些常见平台来说是否非常 Pythonic。
至少在以下情况下可能会出现问题:
- 如果某个平台允许空字符串作为文件名或文件夹名称,
- 如果存在Windows以外的平台,该平台不允许在文件名中使用反斜杠
- 如果存在任何不允许正斜杠(
/
( 作为文件夹分隔符的平台 - 如果存在任何平台允许反斜杠 (
( 或正斜杠 (
/
( 以外的字符作为文件夹分隔符
但我不确定这样的平台是否存在,如果是这样,Python 是否甚至可以在这些平台上运行(如果不是这样,那么会导致问题(?
顺便说一下,您不能使用if '\' in __file__: ...
(作为代码块中if sys.platform == 'win32'
的替代品(来检查是否允许反斜杠,因为出于某种原因,即使在Windows 上,__file__
也会返回带有正斜杠的当前脚本的路径。即使不是这种情况,也可能不是一个好方法。
您可以使用pathlib
,特别是parts
方法,如下所示:
from pathlib import Path
myPath = Path(r"C:Program FilesCMakebincmake.exe")
print(list(myPath.parts))
退货['C:\', 'Program Files', 'CMake', 'bin', 'cmake.exe']
编辑
你可以像这样重新连接路径
newPath = Path(*myPath.parts)
print(newPath)
退货C:Program FilesCMakebincmake.exe