0
import os
def find_method(name):
        i = 0
        found_dic = { "$_GET":[], "$_POST":[], "include":[], "require":[], "mysql_query":[], "SELECT":[], "system":[], "exec":[], "passthru":[], "readfile":[], "fopen":[], "eval":[] }

        for x in file(name, "r"):
                i += 1
                for key in found_dic:
                        if x.strip().find(key) != -1:
                                found_dic[key].append("LINE:"+str(i)+":" + x.strip())

        print "="*20, name, "="*20
        for key in found_dic:
                if found_dic[key]:
                        print " ", "-"*10, key, "-"*10
                        for r in found_dic[key]:
                               print "  ",r

def search(dirname):
        flist = os.listdir(dirname)
        for f in flist:
                next = os.path.join(dirname, f)
                if os.path.isdir(next):
                        search(next)
                else:
                        doFileWork(next)

def doFileWork(filename):
        ext = os.path.splitext(filename)[-1]
        #if ext == '.html': print filename
        if ext == '.php':
               # print "target:" + filename
                find_method(filename)
  1. 我怎样才能只打印结果。即使文件中没有任何结果,它也会打印文件的所有名称。如果它有任何结果,我想制作打印文件名

  2. 这是关于搜索单词,但它显示每个单词都包含喜欢(搜索包含)然后它还在句子中找到单词并打印所有句子我只想找到句子中不包含的单词“include”。这真的很难解释..我希望能理解.. srry

4

2 回答 2

0

我希望这就是你所要求的:

for i, line in enumerate(file(name, "r")):
    found = False
    for key in found_dic:
        if key in line.strip():
            found_dic[key].append("LINE:"+str(i)+":" + key)
            found = True

    if found:
        print "="*20, name, "="*20
        for key in found_dic:
            if found_dic[key]:
                print " ", "-"*10, key, "-"*10
                for r in found_dic[key]:
                    print "  ",r

如果您只想在实际找到某些东西时打印名称,则必须检查是否找到了某些东西。此外,您只在第 5 行连接 key,因为 key 是您搜索的内容。而且您只想添加您搜索的内容。

进一步的变化:我在第 i 行使用了 enumerate 函数,它比增加你拥有的 i 更容易和更易读。

我还在第 10 行更改了条件。在这里使用 in 关键字是更简单易读的方式...

于 2013-04-02T20:50:59.190 回答
0

看起来第一个打印命令的缩进可能有问题,您正在打印“名称”,但它在 for 循环之外。

尝试填充您的字典,然后按照以下方式打印字典:

with open(your_file) as f:
    found_dic = {}
    key = 'your_key'

    # populate the dictionary
    found_dic[key] = [i for i in f if key in i and i not in found_dic]

以此为起点,希望您可以根据需要将结果格式化为字典。只有包含“键”的行才会出现在 found_dic 中,因此您应该能够以您喜欢的任何格式将它们打印出来。

希望这可以帮助

于 2013-04-02T20:58:10.400 回答