我有一个字符串变量,它代表一个dos路径,例如:

var = “d:\stuff\morestuff\Furtherdown\THEFILE.txt”

我想把这个字符串分成:

[ “d”, “stuff”, “morestuff”, “Furtherdown”, “THEFILE.txt” ]

我尝试过使用split()和replace(),但它们要么只处理第一个反斜杠,要么将十六进制数字插入字符串。

我需要以某种方式将这个字符串变量转换为原始字符串,以便我可以解析它。

最好的方法是什么?

我还应该添加,var的内容,即我试图解析的路径,实际上是一个命令行查询的返回值。这不是我自己生成的路径数据。它存储在一个文件中,命令行工具不会转义反斜杠。


当前回答

我不确定这是否完全回答了问题,但我写这个小函数的时候很开心,它保持一个堆栈,坚持os。基于路径的操作,并返回项的列表/堆栈。

def components(path):
    ret = []
    while len(path) > 0:
        path, crust = split(path)
        ret.insert(0, crust)
    return ret

其他回答

功能性的方法,用发电机。

def split(path):
    (drive, head) = os.path.splitdrive(path)
    while (head != os.sep):
        (head, tail) = os.path.split(head)
        yield tail

在行动:

>>> print([x for x in split(os.path.normpath('/path/to/filename'))])
['filename', 'to', 'path']

使用ntpath.split ()

我不确定这是否完全回答了问题,但我写这个小函数的时候很开心,它保持一个堆栈,坚持os。基于路径的操作,并返回项的列表/堆栈。

def components(path):
    ret = []
    while len(path) > 0:
        path, crust = split(path)
        ret.insert(0, crust)
    return ret

递归是为了好玩。

这不是最优雅的回答,但应该适用于任何地方:

import os

def split_path(path):
    head = os.path.dirname(path)
    tail = os.path.basename(path)
    if head == os.path.dirname(head):
        return [tail]
    return split_path(head) + [tail]

下面的代码行可以处理:

C:/路径/路径 C://path//path C:\路径\路径 C:\路径\路径

Path = re.split(r'[///\]', Path)