Pythons查找父目录替代项

2024-04-29 11:52:58 发布

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

在Python中,似乎有(至少)两种不同的获取父目录路径的方法,这两种方法我都见过。以下是等价的还是我遗漏了什么?你知道吗

os.path.dirname(my_dir)

os.path.join(my_dir, os.pardir)

前者较短,但可能不太清晰(尤其是当上升超过1层时)。我在努力想它还有什么可能的用途欧斯帕迪尔或者帕迪尔?你知道吗

Zen of Python: "There should be one-- and preferably only one --obvious way to do it"


Tags: path方法路径目录osmydirone
3条回答

检查以下线路。父目录由第一个目录给出(在本例中,对于html,它是/var/www)。欧斯帕迪尔显示了一个“…”,这是一个常量,几乎被大多数基于Windows和POSIX的操作系统用来引用父目录。当你用'my_dir'连接它时,你会得到my_dir+'..'这不是你需要的。你知道吗

>>> import os
>>> a = "/var/www/html"
>>> os.path.dirname(a)
'/var/www'
>>> os.path.join(a, os.pardir)
'/var/www/html/..'
>>> 

这两件事是不相等的。如果您阅读documentation,您将看到dirname只是返回您提供的路径的目录。你知道吗

所以os.path.dirname("/foo/bar/file.txt")将返回/foo/baros.path.dirname("/foo/bar/")也将返回/foo/bar

顾名思义,os.path.join将路径片段连接在一起。你知道吗

所以如果我想得到/foo/bar/file.txt,我可以使用os.path.join("/foo/bar/", "file.txt")。在您给出的示例中,os.path.join("/foo/bar/", os.pardir)将给出/foo/bar/..。你知道吗

另一种常用的方法是:

parent, _ = os.path.split("/foo/bar/file.txt")

其中parent是父目录,分配给_的值是file.txt。原因是splitdirname在做两件稍有不同的事情。split返回父目录的名称和文件名,而dirname只返回第一部分,基本上是上面一行的速记方法。你知道吗

关于pardir的用例并不多。如果您想看一些,请查看this。你知道吗

它们不是等价的。你知道吗

区别在于如何处理以os.sep结尾的路径:

>>> os.path.dirname('/foo/bar/')
'/foo/bar'

但是:

>>> os.path.join('/foo/bar/', os.pardir)
'/foo/bar/..'
>>> os.path.abspath('/foo/bar/..')
'/foo'

那么你应该用哪一个呢?都不是。改用pathlib module

>>> from pathlib import Path
>>> Path('/foo/bar/').parent
PosixPath('/foo')
>>> str(Path('/foo/bar/').parent)
'/foo'

如果您绝对不能使用pathlib,请使用os.path.dirname。想要在文件路径中有pardir段(..)的情况非常罕见,它们比任何其他情况都更容易引起问题。你知道吗

相关问题 更多 >