检查目录是否在路径中

3
我将尝试编写一个Python函数来完成以下任务:给定一个路径和目录,仅在路径中出现目录时返回True。
例如,请考虑以下示例:
path = 'Documents/Pictures/random/old/test_image.jpg'
dir = 'random'

这应该返回True,因为目录random/在路径中的某个地方出现。另一方面,以下示例应返回False:

path = 'Documents/Pictures/random_pictures/old/test_image.jpg'
dir = 'random`

这是因为路径中没有random/目录,但有random_pictures/目录。
有比这样简单的方法吗?
def is_in_directory(path, dir):
    return '/{0}/'.format(dir) in path

也许可以使用 osos.path 模块来实现?

请注意,如果dir是路径中的第一个目录,则在路径中使用'/ {0} /'.format(dir)将失败。 在您的示例中,如果dir ='Documents',则会返回false。 - The2ndSon
2个回答

3
您可以使用 os.path.split 来获取目录路径,然后拆分它们并检查是否存在:
>>> dir = 'random'
>>> dir in os.path.split(path)[0].split('/')
True

正如@LittleQ建议的更好的方法,您可以使用os.path.sep来拆分基本路径。

>>> dir in os.path.split(path)[0].split(s.path.sep)
True

1
使用os.path.sep作为分隔符。 - LittleQ

2

使用os.path.sepos.path.dirname进行分割:

from os.path import sep,dirname
def is_in_directory(p, d):
    return d in dirname(p).split(sep)

os.path.dirname(path)¶

返回路径path的目录名称。这是将path传递给split()函数后返回的一对元素中的第一个元素。


它将如何处理“Documents/Pictures/random”?同时将“d”更改为“dir”。 - dlavila
Documents/Pictures/random 中的 random 可能是文件或文件夹,您应该进行检查。 - dlavila
1
@dlavila,我在寻找dirname函数,我知道有一种方法可以直接将目录作为字符串获取,只是我记不得函数名,dirname函数可以获取目录,然后我们只需按照分隔符进行分割。 - Padraic Cunningham
dirname与执行p[:p.rindex(sep)]相同,如果Documents/Pictures/random是文件或目录,则会将random删除。 - dlavila
1
@dlavila,确实不确定OP是否在检查dir是否为文件系统上的目录或者在分隔符上进行操作,您可以使用return d in _dir(p).split(sep) and isdir(_dir),其中_dir是dirname(p) - Padraic Cunningham
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接