Python 的判断目录层级方法问题

2017-06-12 10:49:28 +08:00
 ray1888
假设有两个目录 A、B,Python 有模块可以直接判断出 A 是否是 B 的子目录吗?如果没有,只能用正则去进行匹配 dirname 吗?求大神解答并且提供好的方法
3130 次点击
所在节点    Python
14 条回复
CoX
2017-06-12 11:02:37 +08:00
os.path.dirname(B) == A
不用正则也可以
0asis
2017-06-12 11:07:40 +08:00
A.startswith(B) ?
imn1
2017-06-12 11:08:40 +08:00
@CoX
== 这个只能判断父级

AB 均为 fullpath 的话,A in B 吧
aa825aa
2017-06-12 11:30:50 +08:00
import glob; if glob.glob("B/A"):return True
binjjam
2017-06-12 12:46:57 +08:00
@imn1 你这个显然是错的老铁,
C: /a/
B: /a/b/
A: /a/b/c

感觉
os.path.abspath(A).startswith(os.path.abspath(B))
lll9p
2017-06-12 13:02:17 +08:00
https://gist.github.com/lll9p/4c2a352bda7245236467b19e527616dc

用 pathlib 很方便把。py3.4 以上有。。
lll9p
2017-06-12 13:04:13 +08:00
py3.4 以下的可以装 pathlib2
imn1
2017-06-12 13:08:09 +08:00
@binjjam
受 1L 影响搞错方向

In [6]: c="/a/"

In [7]: b="/a/b/"

In [8]: a="/a/b/c"

In [9]: d="/a/c"

In [10]: c in a
Out[10]: True

In [11]: d in a
Out[11]: False

In [12]: b in a
Out[12]: True
binjjam
2017-06-12 14:14:41 +08:00
@imn1
B: /b/a/
A: /a/
A in B,但是
imn1
2017-06-12 14:22:42 +08:00
@binjjam
U R right
imn1
2017-06-12 14:27:13 +08:00
顺便提醒 LZ,如果涉及写操作,还要考虑软硬连接
ray1888
2017-06-12 14:54:07 +08:00
@imn1 现在还是在 windows 平台上测试,linux 上测试时候会考虑的
hl
2017-06-12 15:19:01 +08:00
判断 A 是否是 B 的子目录
换句话说,如果路径 B/A 存在,则 A 是 B 的子目录

import os

IS_SUB_DIR = os.path.isdir(os.path.join('B','A'))

if IS_SUB_DIR: print("A is the subdir of B")
hasdream
2017-06-12 21:48:23 +08:00
A = '/usr/local/abc'
B = '/usr/local'
B == A[:len(B)]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/367749

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX