好的,所以我正在尝试创建一个执行以下操作的脚本:在目录中搜索已知的哈希值。这是我的第一个脚本:
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 :(得分: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()
。
答案 1 :(得分: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)]