擅长:python、mysql、java
<p>一位聪明的老师曾经告诉我:</p>
<blockquote>
<p>When there are several established ways to do something, none of them is good for all cases.</p>
</blockquote>
<p>因此,我将为这个问题的一个子集添加一个解决方案:通常,我们只想检查一个文件是否匹配开始字符串和结束字符串,而不想进入子目录。因此,我们需要一个返回文件名列表的函数,例如:</p>
<pre><code>filenames = dir_filter('foo/baz', radical='radical', extension='.txt')
</code></pre>
<p>如果希望首先声明两个函数,可以执行以下操作:</p>
<pre><code>def file_filter(filename, radical='', extension=''):
"Check if a filename matches a radical and extension"
if not filename:
return False
filename = filename.strip()
return(filename.startswith(radical) and filename.endswith(extension))
def dir_filter(dirname='', radical='', extension=''):
"Filter filenames in directory according to radical and extension"
if not dirname:
dirname = '.'
return [filename for filename in os.listdir(dirname)
if file_filter(filename, radical, extension)]
</code></pre>
<p>这个解决方案可以很容易地用正则表达式进行泛化(如果不希望模式总是停留在文件名的开头或结尾,您可能需要添加一个<code>pattern</code>参数)。</p>