2013-07-02 56 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)]