Python-使用子过程在目录和子目录中查找包含特定文本的所有文件

问题描述 投票:1回答:1

我是python的新手。我正在遍历一组使用variable goods的操作,我想在文件中使用特定文本词price查找文件列表以grep所有文件并读取它。我有以下代码,但它给[Errno 2]没有此类文件或目录。如果还有其他方法,请有人指导我,在此先感谢

data=os.listdir('./data/pack/')
for goods in data:
    filepath = ('./file/'+ goods + '/cost/')
    grep=subprocess.Popen(['grep','-lir','price', filepath],stdout=subprocess.PIPE)
    found=grep.communicate()[0]
    print(found)

我什至尝试了其他类似下面的方法

try:
    grep1=subprocess.Popen('[./file/'+ goods + '/cost/']), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    grep=subprocess.Popen(['grep','-lir','price'],stdin=grep1.stdout,stdout=subprocess.PIPE)
    grep1.stdout.close()
    grep.communicate()
except

但是以上两种方法都没有给我结果

谢谢! 找到结果!

cmd = 'grep -lir "price"' './file/'+ goods + '/cost/' -i | grep '.txt'
result = subprocess.check_output(cmd, shell=True)
python linux shell grep subprocess
1个回答
0
投票

以递归方式遍历文件夹和子文件夹,并获取要在其中搜索所需扩展名的所有文件。

import os
from glob import glob

dir_path = "path_of_your_directory"
file_extension = "file_extensions_in_which_you_want_to_search"

files = [y for x in os.walk(dir_path) for y in glob(os.path.join(x[0], '*.' + file_extension))]

现在遍历文件,打开每个文件,然后检查要搜索的文本。您可以使用find()regular expressions进行搜索。

for file_path in files:
    if open(file_path, 'r').read().find('the_text_you_want_to_search') != -1:
        print("found")
© www.soinside.com 2019 - 2024. All rights reserved.