导致此错误的原因是什么?如何解决?

时间:2016-11-12 23:37:41

标签: python python-3.x

我正在尝试在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))

2 个答案:

答案 0 :(得分: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 :(得分:-1)

我相信你应该打开文件。为它指定一个变量。在你的案例文件中。 然后在下一行,您可以通过调用f.read()

来读取该文件