【发布时间】:2020-07-16 17:41:16
【问题描述】:
我想编写以下代码来将数据馈送与我的程序的其余部分分离,但它不会抛出错误 - “ValueError: I/O operation on closed file。”
class Feed:
def __init__(self, data_loc=None):
self.data_loc = data_loc
with open(self.data_loc, newline='') as f:
self.reader = csv.reader(f)
def get_next_tick(self):
return next(self.reader)
raw_data_loc = '{path to file}'
feed = Feed(data_loc=raw_data_loc)
print(feed.get_next_item())
我知道在 init 运行后文件关闭并因此出现错误,但是有没有办法在我的代码中实现这个 csv 生成器的分离?
【问题讨论】:
-
您想在 get_next_tick 方法中明确不再使用“with open()”语句吗?
-
在构造函数中你可以做
self.reader = csv.reader(open(self.data_loc, 'r', newline='')) -
with语句会自动关闭文件……这就是使用文件对象作为上下文管理器的全部意义所在。如果您不想关闭它,请不要这样做。 -
谢谢大家,会仔细研究一下,看看它是否能解决。 @Jonas,不,我不反对在 get_next_tick 方法中使用它。
-
@AndrejKesely 成功了。谢谢!
标签: python python-3.x csv