Python3:将路径转换为文件夹列表和可能的文件



如何将像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。

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

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

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

最新更新