Python 从另一个脚本匹配MD5哈希

Python 从另一个脚本匹配MD5哈希,python,hash,md5,Python,Hash,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()

好的,我正在尝试创建一个脚本,它执行以下操作:在目录中搜索已知的哈希值。这是我的第一个剧本:

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"
knownhahes.py

print ("Call worked\n")

md5List = "01071709f67193b295beb7eab6e66646" + "5d41402abc4b2a76b9719d911017c592"
目前的问题是,我必须手动输入文件,我想找出文件中显示photo.jpg的散列。另外,我还没有MD5列表来工作

我希望脚本最终能像这样工作:

python hash.py <directory>
1 match 
cookies.jpg matches hash
python hash.py
1场比赛
cookies.jpg匹配哈希

那么,如何让脚本搜索目录而不是手动键入要散列的文件呢?另外,如何修复md5List,因为它是错误的?

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

import os

#Get list of files in working directory
files_list = os.listdir(os.getcwd())
您可以使用for循环遍历列表:

for file in files_list:
    #do something

正如下面提到的分点,你也可以使用。

简单的小要点应该可以解决你的大部分问题。如果你不喜欢用面向对象的方法解决这个问题,这是可以理解的,但是我相信所有重要的概念都是以一种非常清晰、简洁的方式呈现出来的。如果你有任何问题,请告诉我

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)]

首先,为什么需要将md5list放在单独的脚本中?用已知的md5填充一个文件,然后在数组中读取它们,不是更容易吗?@BubbleMonster您应该更改您的问题标题,以实际反映您提出的问题,并且可能会删除您发布的大部分代码,因为它们并不真正相关。或者使用
os.walk()
如果要扫描目录及其子目录。