2016-11-12 1 views
-1

Я пытаюсь сделать простую программу сжатия в Python, но я получаю эту ошибкуЧто вызывает эту ошибку и как ее исправить?

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

Почему я получаю эту ошибку? Это мой полный код

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

Вы просите Python лечить результат выражения open("admin.dll", "r").read() (строка) в качестве менеджера контекста. Ожидается, что у менеджеров контекста будет метод __exit__, но строки не имеют этих методов.

Вы бы нормально проходить в объекте файла:

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

Файл объектов сделать имеют необходимые методы менеджер контекста.

Обратите внимание, что у вас есть и другие ошибки; sys.getsizeof создает размер памяти объекта Python, не размер файла. Вы можете использовать для этого os.stat() или искать в конце файла и использовать fileobj.tell(), чтобы получить размер. Чтобы получить размер сжатого результата, используйте len().

-1

Я считаю, что вы должны открыть файл. Назначьте ему переменную. В вашем файле дела. Затем на следующей строке вы можете прочитать файл, вызвав f.read()

Смежные вопросы