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 甚至适用于这些常见平台。

至少在以下情况下可能会出现问题:

  1. 如果某些平台允许空字符串作为文件名或文件夹名,
  2. 如果存在 Windows 以外的平台,该平台不允许在文件名中使用反斜杠
  3. 如果存在任何平台允许正斜杠(/)作为文件文件夹分隔符
  4. 如果存在 任何 平台允许反斜杠 (\) 或正斜杠 (/) 以外的字符作为文件文件夹分隔符

但我不确定是否存在这样的平台,如果存在,是否 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