2016-10-12 7 views
0

私はPython 2.7のスクリプトをPython 3.5に移植しました。そのため、2.7では利用できないライブラリを使用できますが、このコードからMemoryErrorを取得していますHashlib MemoryError Python 3.5では2.7ではなく

import hashlib, functools 
sha2h = hashlib.sha256() 
with open('/path/to/any/file', 'rb') as f: 
     [sha2h.update(chunk) for chunk in iter(functools.partial(f.read, 256), '')] 

私が知る限り、これはファイルのSHA256ハッシュを取得する適切な方法です。私はこの問題について何かを見つけることができません。それが助け場合は、ここでは上記のコードは、シェルから実行されるトレースバックだ:

File "<stdin>", line 2, in <module> 
File "<stdin>", line 2, in <listcomp> 

もhashlibのマニュアルを一致させるために

sha2h = hashlib.new('sha256') 

sha2h = hashlib.sha256() 

を交換するが、試してみましたこれは転帰に変化をもたらさなかった。

助力や洞察力があれば幸いです。

答えて

0

は、Python 3では、あなたはiterコールのためのセンチネル値としてb''代わりの''を設定する必要があります。本当にこのような副作用のリストの内包表記を使用すべきではないにも

iter(functools.partial(f.read, 256), b'') 

あなたが、しかし、もしそれを行う既存のコードを移植しているのであれば、今のところ残しておいたほうがよいでしょう。

+0

ありがとうございました!この変更により問題が解決されました。 – Nstr10

+0

恥ずかしくて、これは私が最初に書いたコードです。私の過度に野心的な "Hello world"プロジェクトです。あなたがこのPython初心者向けに特別な助けを感じているなら、これを行うより適切な方法を提案(またはリンク)できますか? – Nstr10

+0

@ Nstr10:通常の 'for'ループを使います。 – user2357112

関連する問題