试图用pandas子集替换open(),但我得到了一个__exit__错误



我正在尝试使用pylabels为即将到来的事件创建名称标签。在代码的一部分中,有一个tid位:

with open(os.path.join(base_path, "names.txt")) as names:
sheet.add_labels(name.strip() for name in names)

其中CCD_ 1。因此,本质上,这将加载"names.txt"的每一行,并使用"specs"中的规范调用函数"write_name",并将每个名称添加到唯一的标签中。我正试图将此代码更改为以下代码:

with text_file[["Name"]] as names:
sheet.add_labels(name.strip() for name in names)

但我得到了这个错误:

Traceback (most recent call last):
File "sticker.V.7.py", line 173, in <module>
with text_file[["Name"]] as names:
AttributeError: __exit__

有人能帮我理解退出在这种情况下意味着什么吗?我不理解其他意见书。

我希望添加这个子集方面,这样我就可以在名称标签中添加更多的细节。

我正在使用Python3.5

有人能帮我理解__exit__在这种情况下的含义吗?我不理解其他提交的材料。。。由于text_file不是一个函数,所以它应该是可存在的。

使用with语句上下文管理器时,该对象必须定义以下两种方法:

  • __enter__
  • __exit__

无论text_file[["Name"]]是什么(看起来是Pandas DataFrame(,它都不实现这两种方法。正如回溯所示,它根本没有定义__enter__,所以执行就在那里停止并引发异常。

我认为没有必要使用DataFrame作为上下文管理器。一个典型的用例是,您希望确保在with块的末尾发生一些事情,即关闭文件流。(就像sheet = labels.Sheet(specs, write_name, border=True)0/finally块一样——你需要确保__exit__被无条件调用。(对于Pandas DataFrame,我不确定是否有任何类比需要使用这两个dunder方法。

相关内容

最新更新