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

2024-09-27 07:34:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我想将此字符串拆分为:

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

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

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

最好的方法是什么

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


Tags: 方法字符串命令行路径txtvar方式replace
3条回答

我已经被很多次的人咬了一口,他们编写了自己的路径修改函数,结果弄错了。空格、斜杠、反斜杠、冒号——造成混淆的可能性并非无穷无尽,但不管怎样,还是很容易出错。所以我坚持使用os.path,并在此基础上推荐它

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

您可以按如下方式获取驱动器和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的开头弹出一个"\"。如果您不想这样做,可能会丢失一些代码。)

在Python中>=3.4这已变得简单得多。现在可以使用^{}获取路径的所有部分

例如:

>>> 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')

在Windows安装的Python3上,这将假定您正在使用Windows路径,而在*nix上,它将假定您正在使用posix路径。这通常是您想要的,但如果不是,您可以根据需要使用类pathlib.PurePosixPathpathlib.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

我愿意

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

首先,将路径字符串规范化为操作系统的适当字符串。然后os.sep必须安全地用作字符串函数拆分中的分隔符

相关问题 更多 >

    热门问题