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

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

我想把这个字符串分成:

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

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

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

最好的方法是什么?

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


当前回答

我使用下面的代码,因为它使用os.path.basename函数,它不会向返回的列表添加任何斜杠。它也适用于任何平台的斜杠:即窗口的\\\\或unix的/。此外,它不会添加windows用于服务器路径的\\\\\\\\:)

def SplitPath( split_path ):
    pathSplit_lst   = []
    while os.path.basename(split_path):
        pathSplit_lst.append( os.path.basename(split_path) )
        split_path = os.path.dirname(split_path)
    pathSplit_lst.reverse()
    return pathSplit_lst

所以对于:

\\\\\\\server\\\\folder1\\\\folder2\\\\folder3\\\\folder4

你会得到:

['server','folder1','folder2','folder3','folder4']

其他回答

在Python >=3.4中,这变得简单得多。您现在可以使用pathlib.Path.parts来获取路径的所有部分。

例子:

>>> from pathlib import Path
>>> Path('C:/path/to/file.txt').parts
('C:\\', 'path', 'to', 'file.txt')
>>> Path(r'C:\path\to\file.txt').parts
('C:\\', 'path', 'to', 'file.txt')

在Python 3的Windows安装上,这将假设您使用的是Windows路径,而在*nix上,它将假设您使用的是posix路径。这通常是你想要的,但如果不是,你可以使用类pathlib。PurePosixPath或pathlib。PureWindowsPath:

>>> from pathlib import PurePosixPath, PureWindowsPath
>>> PurePosixPath('/path/to/file.txt').parts
('/', 'path', 'to', 'file.txt')
>>> PureWindowsPath(r'C:\path\to\file.txt').parts
('C:\\', 'path', 'to', 'file.txt')
>>> PureWindowsPath(r'\\host\share\path\to\file.txt').parts
('\\\\host\\share\\', 'path', 'to', 'file.txt')

编辑: 还有一个python 2的反向端口:pathlib2

这对我来说很管用:

>>> a=r"d:\stuff\morestuff\furtherdown\THEFILE.txt"
>>> a.split("\\")
['d:', 'stuff', 'morestuff', 'furtherdown', 'THEFILE.txt']

当然,您可能还需要从第一个组件中剥离冒号,但保留它可以重新组装路径。

r修饰符将字符串字面量标记为“raw”;注意嵌入的反斜杠是如何不加倍的。

让我们假设你有一个文件filedata.txt的内容:

d:\stuff\morestuff\furtherdown\THEFILE.txt
d:\otherstuff\something\otherfile.txt

您可以读取和分割文件路径:

>>> for i in open("filedata.txt").readlines():
...     print i.strip().split("\\")
... 
['d:', 'stuff', 'morestuff', 'furtherdown', 'THEFILE.txt']
['d:', 'otherstuff', 'something', 'otherfile.txt']

我会这么做

import os
path = os.path.normpath(path)
path.split(os.sep)

首先,将路径字符串规范化为适合操作系统的字符串。那么操作系统。Sep在字符串函数split中用作分隔符必须是安全的。

关于关于mypath.split("\\")的内容最好表示为mypath.split(os.sep)。sep是你的特定平台的路径分隔符(例如,\ for Windows, / for Unix,等等),Python构建知道使用哪个。如果您使用sep,那么您的代码将是平台不可知的。