写入多个csv文件而不在每行打开/关闭-Python 3.5

写入多个csv文件而不在每行打开/关闭-Python 3.5,python,csv,file-io,Python,Csv,File Io,我有一个大的csv文件,我正在检查每行的第二列,然后将这一行写入另一个csv文件。我使用Python 3.5。 我的csv文件如下所示: node_1,type,node_2 154555,intermediary,154587 1545877,president,145888 4575885,intermediary,4785774 我需要不同类型的csv文件(中间人、总裁…) 对于如何避免在每行打开和关闭输出文件,您有什么建议吗 谢谢保留一个文件对象的字典——然后你可以说如果foo不

我有一个大的csv文件,我正在检查每行的第二列,然后将这一行写入另一个csv文件。我使用Python 3.5。

我的csv文件如下所示:

node_1,type,node_2  
154555,intermediary,154587
1545877,president,145888
4575885,intermediary,4785774
我需要不同类型的csv文件(中间人、总裁…)

对于如何避免在每行打开和关闭输出文件,您有什么建议吗


谢谢

保留一个文件对象的字典——然后你可以说
如果foo不在filedict中
,做一些事情来打开它,说
filedict[foo]=open(foofile,“w+”)
,然后你就可以写
filedict[foo]
。你可以同时打开很多文件,这没什么大不了的。最后,您可以查看filedict并根据需要将其全部关闭<如果文件不存在,代码>a正好可以创建一个文件(你甚至不需要
a+
,因为你只是在向它写入,而不是从它读取),所以如果不是os.path.exists(r./edges%d.csv'%i),你只需删除
就可以了。
检查它控制的整个块。谢谢,现在速度快多了。
import csv
import os.path

i = 0
list = []
with open('all_edges.csv', 'r') as edges:
    edges_reader = csv.reader(edges)
    for row in edges_reader:
        if row[1] not in list:
            list.append(row[1])
        while row[1] != list[i]:
            i += 1
        if i != 0:
            if not os.path.exists(r'./edges%d.csv' %i):
                with open('edges%d.csv' %i, "w+", newline='') as new_edges:
                    edges_writer = csv.writer(new_edges)
                    edges_writer.writerow(["node_1", "rel_type", "node_2"])
            with open('edges%d.csv' %i, "a+", newline='') as new_edges:
                edges_writer = csv.writer(new_edges)
                edges_writer.writerow(row)
            i = 0