星期一, 二月 05, 2007

python 判断 path 是否是父目录

在我的项目中需要对一个列表(列表配置方式)进行操作,列表配置很常见的一种形式就是文件的路径名(path names),通常使用绝对路径比较好(但这里对下面这个函数其实没有限制)。所以我可能希望找到所有的顶级目录和文件,那么使用下面的函数:
 83 def find_top_files(tmpl):
84 tmpl.sort()
85 topfiles = []
86 invalids = []
87 file1 = ''
88 for item in tmpl:
89 item = item.strip()
90 if not os.path.exists(item):
91 strerr = "^[[31m%s is not a valid file or directory^[[00m" % item
92 print strerr >> sys.stderr
93 invalids.append(item)
94 continue
95 if not file1:
96 if item == '': continue #^W
97 file1 = item
98 topfiles.append(file1)
99 elif item.startswith(file1):
100 # 'file1' is the parent directory of 'item'
101 continue
102 elif file1.startswith(item):
103 file1 = item
104 topfiles[-1] = file1
105 else:
106 file1 = item
107 topfiles.append(file1)
108 return topfiles, invalids
这里首先是对列表进行了排序,这样方便操作。而接下来一个主要的问题是如何判断一个 pathname 是另一个的父目录(或子目录/文件)。因为 pathname 是 string,但这里不能直接使用 str1 in str2 这样的判断,因为显然 /etc in /usr/etc,但两种并没有父/子目录文件的关系。所以这里我使用了上面的粗体部分的办法:if file1.startswith(item),即 str.startswith(substr) 我想这样应该是可行的,这比直接去用 os.path.* 的方法去判读要简便得多。

没有评论: