Python 如何在while循环中创建多个输出文件?

Python 如何在while循环中创建多个输出文件?,python,python-3.x,file,math,Python,Python 3.x,File,Math,我已经写了一个文件,里面有一些数据。但是,无论我做什么,当我希望在while循环的每次迭代中使用不同名称的不同输出文件时,我只能为代码的最终迭代获得一个输出文件(这会更改S0的初始条件): 僵尸启示录建模 将numpy作为np导入 将matplotlib.pyplot作为plt导入 从scipy.integrate导入odeint 作为pd进口熊猫 plt.ion() plt.rcParams['figure.figsize']=10,8 P=0#出生率 d=0.0001#自然死亡百分比(每天)

我已经写了一个文件,里面有一些数据。但是,无论我做什么,当我希望在while循环的每次迭代中使用不同名称的不同输出文件时,我只能为代码的最终迭代获得一个输出文件(这会更改S0的初始条件):

僵尸启示录建模 将numpy作为np导入 将matplotlib.pyplot作为plt导入 从scipy.integrate导入odeint 作为pd进口熊猫 plt.ion() plt.rcParams['figure.figsize']=10,8 P=0#出生率 d=0.0001#自然死亡百分比(每天) B=0.0095#传输百分比(每天) G=0.0001#重拾百分比(每天) A=0.0001#破坏百分比(每天) #求解系统dy/dt=f(y,t) def f(y,t): Si=y[0] Zi=y[1] Ri=y[2] #模型方程(见Munz等人,2009年) f0=P-B*Si*Zi-d*Si f1=B*Si*Zi+G*Ri-A*Si*Zi f2=d*Si+A*Si*Zi-G*Ri 返回[f0,f1,f2] #初始条件 S0=500.#初始种群 Z0=0#初始僵尸数量 R0=0#初始死亡人口 而S0<600 S0+=5 y0=[S0,Z0,R0]#初始条件向量 t=np.linspace(0,5,1000)#时间网格 #解DEs soln=odeint(f,y0,t) S=soln[:,0] Z=soln[:,1] R=soln[:,2] df=pd.dataframes({S,Z,R]} df.to_csv('test.txt',sep='\t')
如何做到这一点?

在while循环中创建一个计数器,并在希望输出文件更改的每次迭代中递增它。
根据计数器值选择要使用的文件。

在while循环中创建一个计数器,并在希望输出文件更改的每次迭代中递增该计数器。
import os

for k in range(1,10):

    # some loop

    with open("myfile.{}.csv".format(k), "w") as f:  # put a counter inside the files name
        f.write("some data") 
print( os.listdir("./"))
根据计数器值选择要使用的文件

import os

for k in range(1,10):

    # some loop

    with open("myfile.{}.csv".format(k), "w") as f:  # put a counter inside the files name
        f.write("some data") 
print( os.listdir("./"))
输出:

['myfile.8.csv', 'myfile.7.csv', 'myfile.6.csv', 'myfile.4.csv',
 'myfile.5.csv', 'main.py', 'myfile.9.csv', 'myfile.1.csv', 
 'myfile.2.csv', 'myfile.3.csv']
['myfile.1.csv', 'myfile.csv', 'myfile.0.csv', 'main.py']

我们的解决方案是,您只需找出该文件是否存在,然后自动递增:

import os
import datetime


def newName(baseName):
    """Checks if baseName exists, if not inserts a running 
    counter and increments it until file does not exist."""

    n = baseName[:-4]+".{}"+baseName[-4:]  # assumes a len-3 filenameextension like txt
    if not os.path.exists(baseName):
        return baseName

    i = 0
    while os.path.exists( n.format(i)):
        i+=1

    return n.format(i)


with open(newName("myfile.csv"),"w") as f: # newName checks and creates a unique name
    f.write("some data") 

with open(newName("myfile.csv"),"w") as f: # if the file already exists.
    f.write("some data") 

with open(newName("myfile.csv"),"w")  as f:
    f.write("some data") 

print( os.listdir("./"))
输出:

['myfile.8.csv', 'myfile.7.csv', 'myfile.6.csv', 'myfile.4.csv',
 'myfile.5.csv', 'main.py', 'myfile.9.csv', 'myfile.1.csv', 
 'myfile.2.csv', 'myfile.3.csv']
['myfile.1.csv', 'myfile.csv', 'myfile.0.csv', 'main.py']
输出:

['myfile.8.csv', 'myfile.7.csv', 'myfile.6.csv', 'myfile.4.csv',
 'myfile.5.csv', 'main.py', 'myfile.9.csv', 'myfile.1.csv', 
 'myfile.2.csv', 'myfile.3.csv']
['myfile.1.csv', 'myfile.csv', 'myfile.0.csv', 'main.py']

我们的解决方案是,您只需找出该文件是否存在,然后自动递增:

import os
import datetime


def newName(baseName):
    """Checks if baseName exists, if not inserts a running 
    counter and increments it until file does not exist."""

    n = baseName[:-4]+".{}"+baseName[-4:]  # assumes a len-3 filenameextension like txt
    if not os.path.exists(baseName):
        return baseName

    i = 0
    while os.path.exists( n.format(i)):
        i+=1

    return n.format(i)


with open(newName("myfile.csv"),"w") as f: # newName checks and creates a unique name
    f.write("some data") 

with open(newName("myfile.csv"),"w") as f: # if the file already exists.
    f.write("some data") 

with open(newName("myfile.csv"),"w")  as f:
    f.write("some data") 

print( os.listdir("./"))
输出:

['myfile.8.csv', 'myfile.7.csv', 'myfile.6.csv', 'myfile.4.csv',
 'myfile.5.csv', 'main.py', 'myfile.9.csv', 'myfile.1.csv', 
 'myfile.2.csv', 'myfile.3.csv']
['myfile.1.csv', 'myfile.csv', 'myfile.0.csv', 'main.py']

谢谢,pandas.Dataframe的过程类似吗?这就是我用来以表格形式构建数据的过程fashion@jipes您的数据帧将文件名作为字符串。您可以执行相同的操作:
df.to_csv('test{}.txt'.format(mycounter},sep='\t')
mycounter
是一个数字变量,您可以在每次执行时增加。或者使用
df.to_csv(newName('test.txt'),sep='\t'))
用于检查文件是否存在,以及是否自动插入递增数字的函数。您还可以插入时间戳-取决于所经过的时间,您可以使用hh:mm:ss或smth。可能性无穷。谢谢您,pandas.Dataframe的过程类似吗?这就是我用来构建我的表格数据fashion@jipes您的数据帧将文件名作为字符串。您可以做同样的事情:
df.to_csv('test{}.txt'.format(mycounter},sep='\t')
mycounter
是一个数字变量,您可以在每段时间增加一个。或者使用
df.to_csv(newName('test.txt'),sep='\t'))
用于检查文件是否存在,以及是否自动插入递增数字的函数。您还可以插入时间戳-取决于经过的时间长度,您可以使用hh:mm:ss或smth等。可能性无穷。您只使用了一次to_csv函数。为什么希望写入多个文件?我最初是p将函数放在循环中,认为它会生成多个文件,但它没有。这可能是因为您每次都使用相同的文件名。是的,根据给出的建议,我在while循环中添加了一个计数器,并在文件名中实现了计数器。现在可以正常工作:)您只使用了一次to_csv函数。为什么希望写入多个文件?我最初将该函数放在循环中,以为它会生成多个文件,但它没有。这可能是因为您每次都使用相同的文件名。是的,根据给出的建议,我在while循环中添加了一个计数器,并实现了t他在文件名中使用计数器。现在按预期工作:)