2014-09-04 45 views
1

我目前使用fnmatch发现我要复制并忽略其它的文件2份文件名:使用的fnmatch匹配

下面是我的一些脚本只是为了给怎样一个例子它被使用了。

pattern = "*.xlsx" 

if fnmatch(name, pattern): 
    source_files.append(os.path.join(path, name)) 

我意识到这是目前还匹配隐藏文件,我不想复制。

我看到解决这个问题的三个选项:

  1. 我既可以排除隐藏文件作为一个整体。
  2. 我可以排除以~$开头的文件。
  3. 或者我可以只选择与Update末开始.xlsx

我觉得最简单的方法来描述我想要复制是正则表达式的文件类型的文件,但我不认为fnmatch接受完整的正则表达式。

你会推荐什么?

回答

2

使用fnmatch的排除某些字符,在docs

In [33]: fnmatch('hello.xlsx', '[!~]*.xlsx') 
Out[33]: True 

In [34]: fnmatch('~hello.xlsx', '[!~]*.xlsx') 
Out[34]: False 

至于还指定在你的问题的最后意见的能力 - 如果你觉得来描述你的文件与正则表达式的最好方法,为什么不用re.match(...) is not None替换fnmatch?你必须使用fnmatch

+0

使用'fnmatch'的原因是因为它是推荐给我的。我是python的新手,特别是使用它来处理像这样的文件。所以文件匹配和正则表达式是我从未做过的事情。因此我对匹配函数缺乏理解。感谢您的帮助,像魅力一样工作! – 2014-09-04 14:50:30