首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用文件后缀检查文件的并行性

使用文件后缀检查文件的并行性
EN

Stack Overflow用户
提问于 2016-10-07 01:50:09
回答 1查看 51关注 0票数 0

给定一个文件目录,例如:

代码语言:javascript
复制
mydir/
  test1.abc
  set123.abc
  jaja98.abc
  test1.xyz
  set123.xyz
  jaja98.xyz

我需要检查每个.abc文件都有一个等价的.xyz文件。我可以这样做:

代码语言:javascript
复制
>>> 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]) )

上面的代码应该传递断言,而类似的内容可能会失败:

代码语言:javascript
复制
>>> 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

但这有点太冗长了。

还有更好的办法做同样的检查吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-07 02:13:34

您可以定义帮助函数,该函数将返回文件名的set,而不需要与给定后缀匹配的扩展名。然后,您可以轻松地检查带有后缀的is文件,.abc是带有.xyz后缀的文件的子集。

代码语言:javascript
复制
filenames = ['test1.abc', 'set123.abc', 'jaja98.abc', 'test1.xyz', 'set123.xyz', 'jaja98.xyz']
filenames2 = ['test1.abc', 'set123.abc', 'jaja98.abc', 'test1.xyz', 'set123.xyz']
suffixes = ('.abc', '.xyz')

def filter_ext(names, ext):
    return {n[:-len(ext)] for n in names if n.endswith(ext)}

assert filter_ext(filenames, suffixes[0]) <= filter_ext(filenames, suffixes[1])
assert filter_ext(filenames2, suffixes[0]) <= filter_ext(filenames2, suffixes[1]) # fail

上述方法也会更有效,因为它具有O(n)时间复杂度,其中原始的是O(n^2)。当然,如果列表很小,这并不重要。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39908156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档