Python:如何检查路径是否为子路径

23

假设我有这些路径:

/tmp/a
/tmp/abc
/tmp/abc/d/my_file.py

我该如何检查/tmp/abc/d/my_file.py是否为/tmp/abc的子路径?我尝试了以下代码:

file_path.startswith(dir_path)

但是对于/tmp/a目录,它返回True,而my_file.py不在其中。

1个回答

20

尝试这样做:

file_path.startswith(os.path.abspath(dir_path)+os.sep)

你还可以参考这个链接:

如何检查一个目录是否是另一个目录的子目录

所以针对你的例子:

>>> '/tmp/abc/d/my_file.py'.startswith(os.path.abspath('/tmp/abc')+os.sep)
True
>>> '/tmp/abc/d/my_file.py'.startswith(os.path.abspath('/tmp/a')+os.sep)
False

1
你可能想要检查一下 file_path.startswith(os.path.abspath(dir_path)+os.sep) 或者 file_path == dir_path - Erik Aronesty
9
这个解决方案可能会引入一些安全问题,因为它没有考虑目录遍历(在路径中添加多个“..”)的情况。你应该比较使用os.path.realpath()后的结果。 - Andreas Kraft
@AndreasKraft 为什么选择 realpath 而不是 normpath - lucidbrot
normpath() 还将路径规范化为操作系统表示形式。这意味着,在 Windows 下使用 "" 作为分隔符,这使得在比较中更难使用。 - Andreas Kraft

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