0

そのため、バイナリ ファイルを作成し、ファイルのチェックサムを取得しようとしています。hashlib ライブラリを完全に理解しているのか、実装方法を正確に理解しているのかはわかりません。Python 2.7で私が持っているものは次のとおりです。

def writefile(self, outputFile):
    outputFile = open(outputFile, 'wb+')
    for par in self.fileformat.pList:
        if par.name.lower() in self.calculated.final.keys():
            outputFile.write(self.calculated.final[par.name.lower()])
        else:
            outputFile.write(self.defaults.defaultValues[par.name.upper()])
    outputFile.close()

    with open(outputFile, 'rb') as fh:
        m = hashlib.md5()
        while True:
            data = fh.read(8192)
            if not data:
                break
            m.update(data)
        print m.digest()
    outputFile.close()

私が得続けているのは:

TypeError: coercing to Unicode: need string or buffer, file found

私は完全に間違った方向に向かっている可能性があるため、どんな助けもいただければ幸いです。

4

1 に答える 1

3

間違いは への 2 番目の呼び出しにありopenます。

with open(outputFile, 'rb') as fh:

ここでoutputFileは、ファイル名ではなく、file最初の呼び出しからのオブジェクトです。これは、文字列 (または Unicode) 引数を期待する ではopen使用できません。open

TypeError: Unicode への強制: 文字列またはバッファが必要です。ファイルが見つかりました

原点は、引数を上書きする関数本体の最初の行ですoutputFile

outputFile = open(outputFile, 'wb+')

これらの間違いを防ぐには:

  • 引数変数への再代入を避ける
  • より適切な名前を使用する: 引数outputFileはファイルではなく、ファイル名またはパスである必要があります。だから、それにfilePath似た名前を付けてください。
于 2013-10-29T17:11:52.927 に答える