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)
如何只打印结果。它打印文件的所有名称eventhough文件中没有任何结果。我想制作打印文件名,如果它有任何结果
这是关于搜索单词,但它显示每个单词包括像(搜索包含)然后它也在句子中找到单词并打印我想要找到的所有单词只包含在句子中的单词“include”。这真的很难解释..我希望能理解...... srry
答案 0 :(得分: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行连接键,因为键是您搜索的。而且您只想添加搜索内容。
进一步的变化: 我在第i行使用了枚举函数,它比递增你自己的i更容易和更易读。
我也改变了第10行的条件。在这里使用in关键字是更简单易读的方式......
答案 1 :(得分:0)
看起来第一个打印命令的缩进可能存在问题,您正在打印'name',但它不在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]
以此为出发点,希望您可以根据需要将结果格式化为字典。只有包含'key'的行才会出现在found_dic中,因此您应该能够以您喜欢的任何格式打印出来。
希望这有帮助