Python文件搜索麻烦

时间:2014-03-22 19:17:52

标签: python file search

我是编程新手,可以提供一些帮助。我正在尝试制作一个程序,它将通过扩展名(多个扩展名)搜索指定目录中的文件,然后只返回在文件名中包含我的关键字列表的特定结果。 我有以下内容:

import os
from fnmatch import fnmatch

root = 'c:\users'
pattern = "*.css"

for path, subdirs, files in os.walk(root):
    for name in files:
        if fnmatch(name, pattern):
            print os.path.join(name)

这将带回一个扩展名的所有文件,在本例中为.css文件,但我需要它来做更多的操作,如图像和文本文件扩展名。我还希望它只返回文件名中包含特定关键字的文件。谁能指出我正确的方向? 感谢

2 个答案:

答案 0 :(得分:2)

也许您可以使用glob

from glob import glob

for filename in glob('*.css'):
    print(filename)

如果您有多个扩展程序,则可以添加glob()返回的列表:

exts = ['ccs', 'txt']

all = []
for ext in exts:
    all += glob('*.' + ext)

for filename in all:
    print(filename)

答案 1 :(得分:0)

好的,所以如果你要搜索文件类型和关键字,这里有一些简单的代码:

import os
import re

root = 'c:\users'
pattern = re.compile("((keyword1)|(keyword2))\.((txt)|(jpg))")

for path, subdirs, files in os.walk(root):
    for name in files:
        if re.match(pattern, name):
            print os.path.join(name)

此代码将与文件扩展名txtjpg匹配,并搜索关键字keyword1keyword2

如果您想制作更加用户友好的代码,轻松添加扩展程序或关键字,您可以使用以下列表:

import os
import re

# configuration information 
root = 'C:\Users'
keywords = [ 'one', 'two']
extensions = [ 'jpg', 'txt' ]
use_wildcard = True # Enables you to catch the keyword anywhere in the filename
# end of configuration 

keyword_pattern = ''
first = True
for k in keywords:
    if use_wildcard:
        k = '.*' + k + '.*'
    if first:
        keyword_pattern += '(' + k + ')'
        first = False
    else:
        keyword_pattern += '|(' + k + ')'

extension_pattern = ''
first = True
for ext in extensions:
    if first:
        extension_pattern += '(' + ext + ')'
        first = False
    else:
        extension_pattern += '|(' + ext + ')'

pattern_regex = r"({0})\.({1})".format(keyword_pattern, extension_pattern)
print "Searching for: " + pattern_regex
pattern = re.compile(pattern_regex)

for path, subdirs, files in os.walk(root):
    for name in files:
        if re.match(pattern, name):
            print os.path.join(path, name)

我使用正则表达式,因为它们非常强大,并且在很多情况下都很有用。它们一见钟情似乎很复杂,但一旦理解了它们,就很难不使用它们。)