显示完整路径的python

显示完整路径的python,python,Python,这里有问题 1.我需要我的结果,需要表现得像 import os def find_method(name): i = 0 found_dic = { "$_GET":[], "$_POST":[], "include":[], "require":[], "mysql_query":[], "SELECT":[], "system":[], "exec":[], "passthru":[], "readfile":[], "fopen":[], "eval":[

这里有问题 1.我需要我的结果,需要表现得像

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

        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

        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)

如果我正确理解了您的问题,您会问如何获取绝对文件路径,那么我如何使用此代码演示类似示例。这个问题已经在问题中得到了回答

要重复答案,您可以在下面找到:

---------- exec ----------
   LINE:287:exec
  ---------- mysql_query ----------
   LINE:43:mysql_query
   LINE:95:mysql_query
   LINE:120:mysql_query

看起来你有两个不同的问题


首先,您显然希望在每批“finds”之前加上它们所在的文件,如下所示:

EX)==/var/www/html/zboard/zboard.php==

我不确定这种格式到底应该是什么,但是……您已经在
doFileWork
中获得了所需的所有信息,只是没有打印出来。只需将这一行添加到
doFileWork
函数的顶部:

>>> import os
>>> os.path.abspath("mydir/myfile.txt")
如果要保证它是绝对路径,即使是从相对路径开始,只要:

print "EX) === {} ==".format(filename)

其次,您显然希望每个匹配项打印整个匹配行,而不仅仅是匹配的键

同样,你也有你需要的信息;问题是您显式地使用了
而不是
行.strip()
。只要替换这个:

print "EX) === {} ==".format(os.path.abspath(filename))
……关于这一点:

found_dic[key].append("LINE:"+str(i)+":" + key)

你真的应该使用
os.walk
,而不是试图自己在
os.listdir
os.path.isdir
之上构建它。(另外,
next
是一个内置函数,因此您可能不想将其重新绑定以表示其他内容。)我认为这不是他的问题。这并不是说他打印的是相对路径而不是绝对路径,而是他根本没有打印任何路径。
found_dic[key].append("LINE:"+str(i)+":" + key)
found_dic[key].append("LINE:"+str(i)+":" + line.strip())