0

私が書いているスクリプトでhashlib funcを使用していますが、それを指しているファイルを取得できません-0kbファイルのハッシュのみを返しますd41d8cd98f00b204e9800998ecf8427e

私はそれを次のように呼んでいます: fHash=md5Checksum(f)wherefはファイルのフル パス文字列です。

md5Checksum func はここからのリフトです: http://www.joelverhagen.com/blog/2011/02/md5-hash-of-file-in-python/明示的に型付けされた 2 番目の例を直接テストしましたファイルへのパスであり、正しいハッシュを返します。

私もos.path.getsize同じ方法でこの方法を使用しています(fSize=os.path.getsize(f))。これにより、ファイルが正しく選択されます。

コード内の文字列の内容をダンプし、明示的に入力されたパスと比較すると、文字列の周りにマーカーfがないことに気付きます。'

/home/.../(500) Days of Summer[2009]/11 - Regina Spektor - Hero.mp3「print f」から

および明示的に入力されたパスから:

print 'The MD5 checksum of text.txt is', md5Checksum('/home/.../deduper/test.txt')(これは機能します)

パスにマーカーを手動で追加する'と、コードが失敗します。

IOError: [Errno 2] No such file or directory: "'/home/.../(500) Days of Summer[2009]/11 - Regina Spektor - Hero.mp3'"

これにより、パスを正しく渡していないと思われます。それが問題なら、私はubuntuボックスにいます。

編集

私は道化師です。私はこれに数日間立ち往生しており、ここに投稿して、途中でmd5Checkerメソッドでそれらの1つを台無しにしてしまったことに気付いたインデントをチェックすることによってのみ...修正しましたそれ、そしてこれは完全に機能します。私をチェックさせてくれてありがとう....(記録のために、私はm.update(data)改行とインラインで行を持っていました.それは今はうまくいきません.... :s

def md5Checksum(filePath):
 fh = open(filePath, 'rb')
 m = hashlib.md5()
 # print "File being hashed: " + filePath
 while True:
  data = fh.read(8192)
  if not data:
   break
  m.update(data)
 return m.hexdigest()   
4

1 に答える 1

0

どういうわけかインデントの位置がずれていましたが、倒れてエラーが発生するほどではありませんでしたが、機能しないほどではありませんでした。回答は元の質問に投稿されています。

于 2012-08-22T09:37:03.653 に答える