2013-07-02 32 views
0

好吧,所以我想创建一个脚本,执行以下操作:搜索目录中已知的哈希。这是我的第一个剧本:从另一个脚本匹配MD5哈希

Hash.py

import hashlib 

from functools import partial 

#call another python script 
execfile("knownHashes.py") 

def md5sum(filename): 
    with open(filename, mode='rb') as f: 
     d = hashlib.md5() 
     for buf in iter(partial(f.read, 128), b''): 
      d.update(buf) 
    return d.hexdigest() 
print "Hash of is: " 
print(md5sum('photo.jpg')) 

if md5List == md5sum: 
    print "Match" 

knownHashes.py

print ("Call worked\n") 

md5List = "01071709f67193b295beb7eab6e66646" + "5d41402abc4b2a76b9719d911017c592" 

目前最大的问题是,我必须手动在文件中输入我想搞清楚它说的photo.jpg的散列。另外,我还没有得到md5List的工作。

我希望脚本最终是这样工作的:

python hash.py <directory> 
1 match 
cookies.jpg matches hash 

所以,我怎么能拿到剧本到搜索目录,而不是手动凑什么文件类型?另外,如何修复md5List,因为这是错误的?

+0

首先,你为什么需要md5list在一个单独的脚本?用已知的md5填充一个文件然后在数组中读取它们会更容易吗? –

+0

@BubbleMonster你应该改变你的问题标题,以真正反映你问的问题,也可能删除你发布的大部分代码,因为它并不真正相关。 –

回答

1

您可以使用以下命令获取当前工作目录中的文件列表。这是您从中运行脚本的目录。

import os 

#Get list of files in working directory 
files_list = os.listdir(os.getcwd()) 

您可以在列表中使用for循环迭代:

for file in files_list: 
    #do something 

由于equinoxel也下面提到的,你可以使用os.walk()为好。

+0

或者如果你想扫描一个目录及其子目录,使用'os.walk()'。 –

0

简单的小要点应该可以解决大部分问题。可以理解的是,如果你不喜欢使用OOP来解决这个问题,但是我相信所有重要的概念作品都是在一个非常简洁的表示中。如果您有任何问题,请告诉我。

class PyGrep: 

    def __init__(self, directory): 
     self.directory = directory 

    def grab_all_files_with_ending(self, file_ending): 
     """Will return absolute paths to all files with given file ending in self.directory""" 
     walk_results = os.walk(self.directory) 
     file_check = lambda walk: len(walk[2]) > 0 
     ending_prelim = lambda walk: file_ending in " ".join(walk[2]) 
     relevant_results = (entry for entry in walk_results if file_check(entry) and ending_prelim(entry)) 
     return (self.grab_files_from_os_walk(result, file_ending) for result in relevant_results) 

    def grab_files_from_os_walk(self, os_walk_tuple, file_ending): 
     format_check = lambda file_name: file_ending in file_name 
     directory, subfolders, file_paths = os_walk_tuple 
     return [os.path.join(directory, file_path) for file_path in file_paths if format_check(file_path)]