【问题标题】:Python3: Convert path to list of folders and a possible filePython3:将路径转换为文件夹列表和可能的文件
【发布时间】:2020-09-24 11:21:20
【问题描述】:

如何将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 的其他平台,也不知道此解决方案是否非常适合这些常见平台。

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

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

但我不确定是否存在这样的平台,如果存在,Python 是否甚至可以在它们上运行(如果不存在则不会引起问题)?

顺便说一句,您不能使用if '\\' in __file__: ...(作为代码块中if sys.platform == 'win32' 的替代品)来检查是否允许使用反斜杠,因为出于某种原因,__file__ 返回带有正斜杠的当前脚本的路径即使在 Windows 上。即使不是这种情况,这也可能不是一个好方法。

【问题讨论】:

标签: python python-3.x path cross-platform


【解决方案1】:

您可以使用pathlib,特别是parts 方法,如下所示:

from pathlib import Path

myPath = Path(r"C:\Program Files\CMake\bin\cmake.exe")
print(list(myPath.parts))

返回['C:\\', 'Program Files', 'CMake', 'bin', 'cmake.exe']

编辑

您可以像这样将路径重新连接在一起

newPath = Path(*myPath.parts)
print(newPath)

返回C:\Program Files\CMake\bin\cmake.exe

【讨论】:

  • 为了加入他们,你需要删除'C:\\'末尾的反斜杠,所以我猜[w.strip(os.sep) for w in myPath.parts]会这样做,可能是跨平台的Path(r"C:/Program Files/CMake/bin/cmake.exe/").parts也返回一个以'C:\\' 作为其第一个元素的元组(所以不需要...w.strip(os.sep + '/')...)?
  • @hilssu 我已经编辑了我的答案,并举例说明了如何将它们重新组合在一起
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 2014-05-04
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多