0

わかりましたので、次のことを行うスクリプトを作成しようとしています: 既知のハッシュのディレクトリを検索します。ここに私の最初のスクリプトがあります:

ハッシュ.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"

既知のHashes.py

print ("Call worked\n")

md5List = "01071709f67193b295beb7eab6e66646" + "5d41402abc4b2a76b9719d911017c592"

現時点での問題は、photo.jpg と書かれている場所のハッシュを調べたいファイルを手動で入力する必要があることです。また、md5List はまだ機能していません。

スクリプトが最終的に次のように機能するようにします。

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

では、ハッシュするファイルを手動で入力するのではなく、スクリプトでディレクトリを検索するにはどうすればよいでしょうか? また、それが間違っているため、md5List を修正するにはどうすればよいですか?

4

2 に答える 2

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()同様に使用できます。

于 2013-07-02T14:51:28.840 に答える
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)]
于 2013-07-02T14:53:56.217 に答える