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

问题描述 投票:0回答:1

我如何转换一个像 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('/')

但我不确定这是否能用在 其他 的平台,也如果这个解决方案对于这些常见的平台来说也不是很Pythonic。

至少在以下情况下会出现问题。

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

但我不确定是否存在这样的平台,如果存在,Python是否能在上面运行 (如果不存在,那么就不会引起问题)?

顺便说一下,你 不能 使用 if '\\' in __file__: ... 替换 if sys.platform == 'win32' 在代码块中)来检查是否允许反斜杠,因为,由于某些原因。__file__ 返回带斜线的当前脚本的路径。即使在Windows上. 而且即使不是这样,可能也不是一个好办法。

python python-3.x path cross-platform
1个回答
1
投票

你可以使用 pathlib,特别是 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)

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

© www.soinside.com 2019 - 2024. All rights reserved.