小编典典

如何在 Python 中将 dos 路径拆分为其组件

all

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

var = "d:\stuff\morestuff\furtherdown\THEFILE.txt"

我想将此字符串拆分为:

[ "d", "stuff", "morestuff", "furtherdown", "THEFILE.txt" ]

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

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

最好的方法是什么?

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


阅读 61

收藏
2022-06-22

共1个答案

小编典典

我被人们编写自己的路径摆弄函数并弄错了很多次。空格、斜杠、反斜杠、冒号——混淆的可能性不是无穷无尽的,但无论如何都很容易犯错误。所以我是一个坚持使用的人os.path,并在此基础上推荐它。

(然而,通向美德的道路并不是最容易走的,很多人在发现这条路时,很想走一条滑向诅咒的道路。直到有一天,一切都崩溃了,他们才会意识到,他们——或,更有可能的是,其他人
- 必须弄清楚为什么一切都出错了,结果有人制作了一个混合斜杠和反斜杠的文件名 -
有人建议答案是“不要这样做”。不要不是这些人中的任何一个。除了那些把斜杠和反斜杠混在一起的人——如果你愿意,你可以成为他们。)

您可以像这样获取驱动器和路径+文件:

drive, path_and_file = os.path.splitdrive(path)

获取路径和文件:

path, file = os.path.split(path_and_file)

获取单个文件夹名称并不是特别方便,但它是一种诚实的中等不适感,增加了以后找到实际运行良好的东西的乐趣:

folders = []
while 1:
    path, folder = os.path.split(path)

    if folder != "":
        folders.append(folder)
    elif path != "":
        folders.append(path)

        break

folders.reverse()

"\"(如果路径最初是绝对的,则会在开头弹出一个folders。如果您不希望这样做,您可能会丢失一些代码。)

2022-06-22