python程序接受来自命令行的字符串并打印文件夹中与该字符串匹配的所有文件

python程序接受来自命令行的字符串并打印文件夹中与该字符串匹配的所有文件,python,command-line,filesystems,Python,Command Line,Filesystems,如何编写程序从命令行接受字符串,并在文件夹(以及子文件夹)中打印与该字符串匹配的所有文件名 我在找一个模式匹配 您可以使用此技术 import os, fnmatch, sys def all_files(root, patterns='*', single_level=False, yield_folders=False): # Expand patterns from semicolon-separated string to list patterns = patterns

如何编写程序从命令行接受字符串,并在文件夹(以及子文件夹)中打印与该字符串匹配的所有文件名


我在找一个模式匹配

您可以使用此技术

import os, fnmatch, sys
def all_files(root, patterns='*', single_level=False, yield_folders=False):
    # Expand patterns from semicolon-separated string to list
    patterns = patterns.split(';')
    for path, subdirs, files in os.walk(root):
        if yield_folders:
            files.extend(subdirs)
        files.sort( )
        for name in files:
            for pattern in patterns:
                if fnmatch.fnmatch(name, pattern):
                    yield os.path.join(path, name)
                    break
        if single_level:
            break

user_definedpath, filepattern = sys.argv[1], sys.argv[2]
# Invoking the all_files and putting them into list
#thefiles = list(all_files('/tmp', '*.py;*.htm;*.html'))
thefiles = list(all_files(user_definedpath, filepattern))
print thefiles
现在您可以在say
/tmp/abc/sample.py
中将此文件保存为
sample.py

然后您可以作为
python/tmp/abc/sample.py”/tmp/xyz/“*.py;*.txt”文件名或文件中的内容执行;进口glob;打印('\\n'.join(glob.glob(sys.argv[1]))
。精确匹配、部分匹配、模式匹配?是否包含子文件夹?通配符?@filmor,当我在命令行中运行它时,代码向我显示了一个索引器:列表超出范围错误。@user2115365,该代码段或多或少地暗示您没有提供足够的信息来获得合理的答案。您必须以
python-c”“
的形式启动它。你问/still/没有提到子文件夹或你想使用的模式,但我想能够匹配我给文件夹中文件名的字符串。比如,如果我将'questi'作为字符串,文件夹(及其子文件夹)包含'question1.c'、'question2.c',questions.doc'它应该返回那些名称,你可以给出文件名而不是*.pyI,比如python sample.py“Users/sample”“welcome.txt”,在这种情况下,Users/sample包含welcome.txt,但它不会显示出来。答案是[]。你应该给出正确的完整路径。在我的windows机器中,它正在工作。效率较低,但在一行python.py“pattern”“dir”?是的。不需要报价
    import sys, os, operator, re
    def filesMatching(pattern, top):
        return [f for f in os.listdir(top) if os.path.isfile(os.path.join(top,f)) and re.match(pattern, f)] + reduce (operator.__concat__, [filesMatching (pattern, os.path.join(top,f)) for f in os.listdir (top) if os.path.isdir(os.path.join(top,f))], [])

    print (filesMatching (sys.argv[1], sys.argv[2]))