给定文件目录,例如:
mydir/
test1.abc
set123.abc
jaja98.abc
test1.xyz
set123.xyz
jaja98.xyz
我需要检查每个.abc
文件是否有一个等价的.xyz
文件。我可以这样做:
>>> filenames = ['test1.abc', 'set123.abc', 'jaja98.abc', 'test1.xyz', 'set123.xyz', 'jaja98.xyz']
>>> suffixes = ('.abc', '.xyz')
>>> assert all( os.path.splitext(_filename)[0]+suffixes[1] in filenames for _filename in filenames if _filename.endswith(suffixes[0]) )
上面的代码应该通过断言,而类似的操作将失败:
>>> filenames = ['test1.abc', 'set123.abc', 'jaja98.abc', 'test1.xyz', 'set123.xyz']
>>> suffixes = ('.abc', '.xyz') >>> assert all(os.path.splitext(_filename)[0]+suffixes[1] in filenames for _filename in filenames if _filename.endswith(suffixes[0]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
但这有点太冗长了。
做同样的检查有更好的方法吗
您可以定义一个helper函数,该函数将返回
set
个文件名,而没有与给定后缀匹配的扩展名。然后您可以轻松地检查后缀为.abc
的is文件是后缀为.xyz
的文件的子集:由于上述方法具有O(n)时间复杂度,而原始方法的时间复杂度为O(n^2),因此上述方法也更有效。当然,如果名单很小,这并不重要
相关问题 更多 >
编程相关推荐