如何在特定条件下在Python中创建不同的csv文件

如何在特定条件下在Python中创建不同的csv文件,python,python-3.x,dataframe,loops,csv,Python,Python 3.x,Dataframe,Loops,Csv,我要做一个微积分,它会产生大量的数据。我想将它们存储到一些csv文件中(不超过限制) 此代码运行良好,但每次我超过IOPub数据速率(或一个数字,我看到它通常会保存800k行),我都希望将下一个数据保存到其他csv文件中,格式为:functio.csv、function1.csv、function2.csv 我可以或多或少地这样做,但我不知道如何不打开上千次“打开文件”或告诉我的程序“当文件已满时,请使用另一个文件”。 谢谢您可以对数据进行计数,并手动关闭/重新打开文件句柄,而不必使用文件上下文

我要做一个微积分,它会产生大量的数据。我想将它们存储到一些csv文件中(不超过限制)

此代码运行良好,但每次我超过IOPub数据速率(或一个数字,我看到它通常会保存800k行),我都希望将下一个数据保存到其他csv文件中,格式为:functio.csv、function1.csv、function2.csv

我可以或多或少地这样做,但我不知道如何不打开上千次“打开文件”或告诉我的程序“当文件已满时,请使用另一个文件”。
谢谢

您可以对数据进行计数,并手动关闭/重新打开文件句柄,而不必使用文件上下文处理程序

请务必记住根据需要将其全部关闭:

from itertools import cycle

import csv

# number for name of file
fn = 0

# open 1st file and csv writer on it
fh = open(f"file_{fn}.csv","w", newline="")
csvwriter = csv.writer(fh)

# loop your data (here its simple numbers)
for number in range(35):
    # if certain conditions met
    if number > 0 and number % 5 == 0:
        # close file
        fh.close()
        # increment number 
        fn += 1
        # and open new file  / csv-writer on it
        fh = open(f"file_{fn}.csv","w", newline="")
        csvwriter = csv.writer(fh)

    # write your data
    csvwriter.writerow(["some","data","of",f"line {number}"])

# close last opened file
fh.close()
输出:

# file_0.csv
some,data,of,line 0
some,data,of,line 1
some,data,of,line 2
some,data,of,line 3
some,data,of,line 4

# file_1.csv
some,data,of,line 5
some,data,of,line 6
some,data,of,line 7
some,data,of,line 8
some,data,of,line 9

# etc.

您可以对数据进行计数并手动关闭/重新打开文件句柄,而不使用文件上下文处理程序

请务必记住根据需要将其全部关闭:

from itertools import cycle

import csv

# number for name of file
fn = 0

# open 1st file and csv writer on it
fh = open(f"file_{fn}.csv","w", newline="")
csvwriter = csv.writer(fh)

# loop your data (here its simple numbers)
for number in range(35):
    # if certain conditions met
    if number > 0 and number % 5 == 0:
        # close file
        fh.close()
        # increment number 
        fn += 1
        # and open new file  / csv-writer on it
        fh = open(f"file_{fn}.csv","w", newline="")
        csvwriter = csv.writer(fh)

    # write your data
    csvwriter.writerow(["some","data","of",f"line {number}"])

# close last opened file
fh.close()
输出:

# file_0.csv
some,data,of,line 0
some,data,of,line 1
some,data,of,line 2
some,data,of,line 3
some,data,of,line 4

# file_1.csv
some,data,of,line 5
some,data,of,line 6
some,data,of,line 7
some,data,of,line 8
some,data,of,line 9

# etc.

你能澄清你的问题是什么(即你想要什么条件)和你的问题是什么(即你为什么想要这个条件)?如果IOPub指的是Jupyter内核客户端连接,那么这个连接与可写入文件的数据大小无关。在本例中,您可能试图解决错误的问题。我想存储一些数据(数百万行),但由于IOPub问题,我在其他代码中使用的pickle在“少数”行之后停止存储。我尝试了不同的方法,但我不知道如何,csv文件更快。因此,我想以一种方式填充不同的文件,以保存所有数据并轻松管理它们。您是“动态”生成数据,还是将结果保存在某个容器中?看起来您在一个名为
function
的容器中有一个列表列表,这是一个奇怪的名称“在运行中”,我使用for循环调用函数生成结果。您能否澄清您的问题(即您想要什么条件)和您的问题(即您为什么想要这个条件)?如果IOPub指的是Jupyter内核客户端连接,那么这个连接与可写入文件的数据大小无关。在本例中,您可能试图解决错误的问题。我想存储一些数据(数百万行),但由于IOPub问题,我在其他代码中使用的pickle在“少数”行之后停止存储。我尝试了不同的方法,但我不知道如何,csv文件更快。因此,我想以一种方式填充不同的文件,以保存所有数据并轻松管理它们。您是“动态”生成数据,还是将结果保存在某个容器中?看起来您在一个名为
function
的容器中有一个列表列表,这是一个奇怪的名称“在运行中”,我通过调用函数的for循环生成结果