Notepad ++多次搜索

时间:2017-09-03 21:39:09

标签: python search notepad++

我正在使用"在文件中查找" (Ctrl + Shift + F)Notepad ++的功能,用于搜索文本文件中字符串的出现次数。 我的文本文件(.sql)位于目录的子文件夹中(例如" Views"和" MaterializedViews"下面):

C:\users\Schema Export\schema_name\Views  
C:\users\Schema Export\schema_name\ MaterializedViews

例如,点击"查找全部" for" cust_account" (在目录中:" C:\ users \ Schema Export \ schema_name \")为我提供了"查找结果"记事本屏幕:

C:\users\Schema Export\schema_name\Views\SM.sql (2 hits)  
C:\users\Schema Export\schema_name>\Views \V_ACCOUNT.sql (8 hits)  
C:\users\Schema Export\schema_name\Views \V_ACCOUNT_rework.sql (8 hits)

新搜索" pos_row_id"例如,给我:

C:\users\Schema Export\schema_name\Views\V_ACCOUNT.sql (2 hits)  
C:\users\Schema Export\schema_name\Views\V_ACCOUNT_rework.sql (2 hits)  
C:\users\Schema Export\schema_name\Views\V_HUB_REFER.sql (1 hit)  

在折叠模式下,我现在在搜索窗口中显示两行:

Search "pos_row_id" (5 hits in 3 files)  
Search "cust_account" (22 hits in 4 files)

我想将此搜索自动化以获得类似的内容:

Search value1 (x1 hits in y1 files), where value1 is "pos_row_id" in example above,  
Search value2 (x2 hits in y2 files), where value2 is "cust_account" in example above,  
Search value3 (x3 hits in y3 files), etc.  
Search value4 (x4 hits in y4 files) 
Search value5 (x5 hits in y5 files) 
Search value6 (x6 hits in y6 files)
(..)

我的第一个想法是录制宏并更新它(使用我的不同值,值1,值2等复制现有代码) 不幸的是,宏代码不是在" shortcuts.xml"中生成的。文件(这个主题有很多主题......)

是否有任何其他可能(可能使用python脚本)从一个值列表中一次性检索所有搜索结果如上所述?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用python 3.6.2。我首先将值存储到dict中,然后将打印时找到的命中数相加。

import os
from collections import defaultdict


def find_all(*args):
    matches = defaultdict(dict)
    for subdir, dirs, files in os.walk('.'):  # walk through all files in all subdirectories
        for file in files:
            with open(os.path.join(subdir, file)) as f:
                data = f.read()
                for arg in args:
                    c = data.count(arg)  # count the number of hits in this file
                    if c > 0:  # if positive, add it to the matches
                        matches[arg][os.path.join(subdir, file)] = c

    return matches


search = find_all('test', 'file')  # your search keys here
for key in search:
    print(f"Search {key} ({sum(search[key].values())} hits in {len(search[key])} files),")

'test''file'只是我在函数中插入的随机搜索键来测试它,用您的搜索项修改它们。您还可以将迭代函数传递给函数,例如list个单词进行搜索。