Python3:将路径转换为文件夹列表和可能的文件
Python3: Convert path to list of folders and a possible file
如何将 r'C:\Users\usern\Documents\file.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'
的替代)来检查是否允许使用反斜杠,因为,出于某种原因,__file__
returns 当前脚本的路径带有正斜杠 ,即使在 Windows 上也是如此。即使情况并非如此,这也可能不是一个好方法。
你可以使用 pathlib
, specifically the parts
方法,像这样:
from pathlib import Path
myPath = Path(r"C:\Program Files\CMake\bin\cmake.exe")
print(list(myPath.parts))
Returns ['C:\', 'Program Files', 'CMake', 'bin', 'cmake.exe']
编辑
你可以像这样把路径连在一起
newPath = Path(*myPath.parts)
print(newPath)
Returns C:\Program Files\CMake\bin\cmake.exe
如何将 r'C:\Users\usern\Documents\file.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'
的替代)来检查是否允许使用反斜杠,因为,出于某种原因,__file__
returns 当前脚本的路径带有正斜杠 ,即使在 Windows 上也是如此。即使情况并非如此,这也可能不是一个好方法。
你可以使用 pathlib
, specifically the parts
方法,像这样:
from pathlib import Path
myPath = Path(r"C:\Program Files\CMake\bin\cmake.exe")
print(list(myPath.parts))
Returns ['C:\', 'Program Files', 'CMake', 'bin', 'cmake.exe']
编辑
你可以像这样把路径连在一起
newPath = Path(*myPath.parts)
print(newPath)
Returns C:\Program Files\CMake\bin\cmake.exe