python - Python:从调用它的函数中定义 csv.reader
问题描述
我想从中读取数据'path_to_csv_file'
并打印。一段有效的代码是:
import csv
class MyClass:
def f1(self):
with open('path_to_csv_file', "r") as f:
reader = csv.reader(f)
for row in reader:
print(row)
现在,我想从我的打印功能中定义阅读器。为此,我尝试:
import csv
class MyClass:
def __init__(self):
with open('path_to_csv_file', "r") as f:
self.reader = csv.reader(f)
def f2(self):
for row in self.reader:
print(row)
但执行f2
:
MyClass().f2()
引发以下错误:
for row in self.reader:
ValueError: I/O operation on closed file.
如何在我的函数之外定义阅读器,然后在内部使用它?(我对此感兴趣的原因是我将在里面的许多功能中使用阅读器,MyClass
我认为只定义一次更简洁。)
解决方案
执行结束的那一刻,with
它将关闭文件。如果您需要打开文件,则必须打开它open()
并将其分配给一个变量以在完成后关闭。请参阅下文。
import csv
class MyClass:
def __init__(self):
self.file=open('csv_file', "r")
self.reader = csv.reader(self.file)
def f2(self):
for row in self.reader:
print(row)
self.file.close()
MyClass().f2()
正如 Pranav 在评论中指出的那样,如果您需要打开文件以供其他功能或多次调用f1()
, keep self.file.close()
out of f2()
,可能在其自己的功能中。