如何解决python在创建新文件并写入I时出现的ValueError:I/O operation on closed file错误

2024-10-04 05:30:28 发布

您现在位置:Python中文网/ 问答频道 /正文

import csv

fileno = 1

record_per_file = 5

lineno = 1

with open('C:/Users/contacts.txt', "r") as csv_file:
    csv_reader = csv.reader(csv_file, delimiter='|')

    with open('C:/Users/contactsextracted' + str(fileno) + '.csv', "w", newline='') as new_file:
        csv_writer = csv.writer(new_file)

        for line in csv_reader:
            if lineno%record_per_file == 0:
                fileno += 1
                lineno += 1
                with open('C:/Users/contactsextracted' + str(fileno) + '.csv',"w", newline='') as new_file:
                    csv_writer = csv.writer(new_file)
            else:
                csv_writer.writerow(line)
                lineno += 1

Tags: csvnewaswithopenrecordusersreader
1条回答
网友
1楼 · 发布于 2024-10-04 05:30:28

创建CSV writer csv_writer = csv.writer(new_file)时,new_file必须引用打开的文件处理程序

在19-20号线上你有 以open('C:/Users/contactsTracted'+str(fileno)+'.csv',“w”,newline='')作为新的\u文件: csv\u writer=csv.writer(新的\u文件)

这两行结束后,new_file关闭(因为with块结束),并且csv_writer不能再使用。当您尝试在第22 csv_writer.writerow(line)行使用它时,您会得到一个错误

现在您可能会看到所有内容都工作了一段时间,因为您在第12-13行中使用了完全相同的变量名称。而这个csv_writer确实保持打开状态,并将工作一段时间,直到csv_writer变量被您在第19行创建的新csv_writer覆盖,然后关闭

您要做的是将写入CSV writer的代码放入CSV writerwith上下文中,如下所示

for line in csv_reader:
    if lineno % record_per_file == 0:
        fileno += 1
        lineno += 1
    else:
        with open('C:/Users/contactsextracted' + str(fileno) + '.csv', "w", newline='') as new_file:
            csv_writer = csv.writer(new_file)
            csv_writer.writerow(line)
            lineno += 1

我不完全确定你想做什么,但这会让你克服你所面临的错误。您可能还希望在for循环完成后使用csv_writer.writerows,而不是使用csvèwriter.writerow

相关问题 更多 >