2016-11-12 19 views
-1

私はPythonで簡単な圧縮プログラムを作成しようとしていますが、なぜ私はこのエラーを取得していますこのエラーの原因は何ですか?どのように修正できますか?

with open("admin.dll", "r").read() as text: 
AttributeError: __exit__  

このエラーを受け取るのですか?これは、あなたがコンテキストマネージャとして表現open("admin.dll", "r").read()(文字列)の結果を処理するためのPythonを求めている私の完全なコード

import zlib, sys, time, base64 
with open("admin.txt", "r").read() as file: 
    print("Uncompressed: " + str(sys.getsizeof(file))) 
    compressed = zlib.compress(file, 9) 
    print("Compressed: ", end="") 
    print(sys.getsizeof(compressed)) 

答えて

4

です。コンテキストマネージャには__exit__メソッドが必要ですが、文字列にはこれらのメソッドはありません。

あなたは、通常ファイルオブジェクトに渡したい:

with open("admin.dll", "r") as fileobj: 
    text = fileobj.read() 

ファイルはが必要なコンテキストマネージャのメソッドを持っていないオブジェクト。

他のエラーもあります。 sys.getsizeofは、ではないファイルのサイズであるのPythonオブジェクトのメモリサイズを生成します。これにはos.stat()を使用するか、ファイルの最後まで検索してfileobj.tell()を使用してサイズを取得します。圧縮結果のサイズを取得するには、len()を使用します。

-1

ファイルを開く必要があります。それに変数を設定します。あなたのケースファイル。 次の行で、f.read()を呼び出してファイルを読むことができます

関連する問題