我知道这听起来是一个常见的错误,在stackoverflow上已经被多次询问。然而,我很确定我的问题是新的,因为我几乎阅读了所有相关主题。
我有两个文件如下:
ALL_USER_PATH = 'all.csv'
NEW_USER_PATH = 'new.csv'
我先打开“all”文件以进行读取。
with open(ALL_USER_PATH, "r") as f:
df = pd.read_csv(f) #pd is pandas
f.close()
接下来,我将删除“新”文件的内容,并准备向其中写入新数据。
if os.path.isfile(NEW_USER_PATH):
os.remove(NEW_USER_PATH)
写入它,它可以正常工作。
with open(NEW_USER_PATH, "a") as csv_n:
#writer_n is to write new users
writer_n = csv.writer(csv_n, delimiter=",", lineterminator='\n')
for user in customer_records:
if checkExistence(df): # a method I wrote before
continue
else:
writer_n.writerow([data_to_be_written])
接下来,我将删除“all”文件并向其中写入新的数据。
if os.path.isfile(ALL_USER_PATH):
os.remove(ALL_USER_PATH)
with open(ALL_USER_PATH, "a") as csv_a:
writer_a = csv.writer(csv_n, delimiter=",", lineterminator='\n')
for user in customer_records:
writer_a.writerow([all_data_to_be_written])
最后一行写入数据到“all”文件时,会抛出错误:
"ValueError i/o operation on closed file"
我认为是因为我之前打开了它,但我记得在读取数据后关闭了它,难道不是吗?请问有人可以告诉我问题出在哪里吗?
writer_a = csv.writer(csv_a, delimiter=",", lineterminator='\n')
,但您意外地重用了csv_n
。如果您使用更具体的名称,则会更清晰(或者在使用完名称后重新使用它们,也可以避免这种情况发生)。 - SuperBiasedManwith
语句,就不需要再调用f.close
方法。 - memoselyk