Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python在具有指定模式的子目录的特定级别中查找具有给定扩展名的文件?_Python - Fatal编程技术网

如何使用python在具有指定模式的子目录的特定级别中查找具有给定扩展名的文件?

如何使用python在具有指定模式的子目录的特定级别中查找具有给定扩展名的文件?,python,Python,在bash中,使用grep可以很容易地完成以下操作: grep“$pattern”$directory/*/*/*/level4/*.txt*>out/$pattern.txt 其中,$pattern是模式,$directory是基本目录,我们只在名为level4的第四级子目录中查找.txt文件。并可能将输出重定向到具有模式名称本身的文件。这在bash中非常有效。Python中是否有一个简单的等价物 我尝试使用os.walk,endswith&find对$directory中的subdir、di

在bash中,使用grep可以很容易地完成以下操作:

grep“$pattern”$directory/*/*/*/level4/*.txt*>out/$pattern.txt

其中,
$pattern
是模式,
$directory
是基本目录,我们只在名为
level4
的第四级子目录中查找.txt文件。并可能将输出重定向到具有模式名称本身的文件。这在bash中非常有效。Python中是否有一个简单的等价物

我尝试使用os.walk,
endswith
&
find
$directory
中的subdir、dirs和files使用
对所有子目录进行迭代,但这将查看所有文件,而不是具有指定名称的第四级文件

像这样:

import glob
import re

pattern = 'directory_name/*/*/*/level4/*.txt*'
regex = re.compile(r'.*test.*')

for filename in glob.glob(pattern):
    with open(filename) as file_desc:
        for line_num, line in enumerate(file_desc):
            if not regex.match(line):
                continue
            output = '{}:{} {}'.format(filename, line_num, line)
            print(output, end='')
像这样:

import glob
import re

pattern = 'directory_name/*/*/*/level4/*.txt*'
regex = re.compile(r'.*test.*')

for filename in glob.glob(pattern):
    with open(filename) as file_desc:
        for line_num, line in enumerate(file_desc):
            if not regex.match(line):
                continue
            output = '{}:{} {}'.format(filename, line_num, line)
            print(output, end='')
这应该相当于bash命令(但我没有测试它)。我想给出一个不需要调整的答案,并使用pathlib(这太神奇了)

从pathlib导入路径
进口稀土
目录=路径('mydir')
out\u目录=路径('out')
模式='我的(整洁|酷|恶心)模式'
out\u file=out\u目录/f'{pattern}.txt'
不带out_文件。打开('w')作为out:
#这种类型的图案是“glob”`
对于在目录.glob('*/*/*/level4/*.txt*'中找到的_文件)
将找到的_文件作为f打开('r'):
对于f中的行:
如果重新搜索(图案、线条):
打印(行,文件=输出)
这应该与bash命令等效(但我没有测试它)。我想给出一个不需要调整的答案,并使用pathlib(这太神奇了)

从pathlib导入路径
进口稀土
目录=路径('mydir')
out\u目录=路径('out')
模式='我的(整洁|酷|恶心)模式'
out\u file=out\u目录/f'{pattern}.txt'
不带out_文件。打开('w')作为out:
#这种类型的图案是“glob”`
对于在目录.glob('*/*/*/level4/*.txt*'中找到的_文件)
将找到的_文件作为f打开('r'):
对于f中的行:
如果重新搜索(图案、线条):
打印(行,文件=输出)

您看过了吗?谢谢@anoordesai。glob看起来很有前途。我去看看。你看过了吗?谢谢@anoordesai。glob看起来很有前途。我去看看。