繁体   English   中英

在python中逐行写入数据文件

[英]Write data file line by line in python

我的代码生成一个二维数组,我想将其保存到文件中。 如示例代码所示,可以使用numpy.savetxt轻松完成此操作。 但是我希望做些不同的事情。 在以下代码中,我为5个步行者生成随机游走。 对于每次步行,我都会生成步行者一段时间的位置并将其存储在列表中。 每次步行完成后,我将包含步行者位置的整个列表作为新行添加到已存在的数组S_data中。 在下一个遍历(或迭代)结束时,我添加了下一个遍历器的位置列表,依此类推。因此,在每个遍历器的迭代结束时,都会向S_data添加新行。 在所有步骤的最后,此S_data最终使用numpy.savetxt保存到外部文件。

import numpy as np

no_of_walkers = 5
t_max = 10

S_data=np.zeros(t_max)

for R in range(no_of_walkers):
    position = []
    x = 0.0
    for t in range(t_max):
        x = x + np.random.randint(-1, 2)
        position.append(x)
    S_data = np.vstack([S_data, position])

S_data = np.delete(S_data, obj=0, axis=0)

np.savetxt('data_file.txt', S_data)

我想做的是,在每次步行结束时,我都不想将位置列表添加到S_data中,而是将其写入外部文件中。 再次在下一次迭代结束时,我将下一个walker的位置列表作为新行添加到外部文件中,依此类推。 我想要这样做是因为,我将不得不为大量的助行器以及更长的时间运行此代码,因此我的代码将消耗大量的RAM,这是我想要避免的。 在每次迭代结束时,是否有Python方法可将列表导出到相同的外部文件,而不会覆盖以前的数据?

如果我理解正确,似乎您正在尝试在每次迭代后附加到文件(如果您的数据文件已经存在),如果使用,请使用:

f = open("data_file.txt", "a+")

"a+"表示您希望在其后附加任何write调用。 文档在这里 如果要进行大量迭代,请确保在任何循环之外打开文件。

当然,您还可以循环以在每次迭代后写入新行的每个元素,然后仅使用以下内容编写换行符:

#open file
for item in newRow:
  #Your formatting will determine the specifics of this write
  f.write(item)
f.write("\n")

像这样的事情做我想你会得到的:

# Use with for file safety
with open('output.txt', 'w') as f:    
    for R in range(no_of_walkers):
        x = 0.0
        for t in range(t_max):
            x = x + np.random.randint(-1, 2)
            f.write(str(x) + ' ')
        f.write('\n')

output.txt的

1.0 1.0 1.0 1.0 1.0 0.0 0.0 -1.0 -2.0 -2.0 
0.0 1.0 0.0 0.0 -1.0 0.0 1.0 0.0 1.0 1.0 
-1.0 -1.0 -1.0 -2.0 -1.0 -1.0 -2.0 -1.0 -2.0 -3.0 
-1.0 -1.0 0.0 1.0 0.0 1.0 2.0 1.0 2.0 1.0 
1.0 0.0 -1.0 -2.0 -1.0 -1.0 0.0 1.0 1.0 0.0 

至于效率,我很确定您最初尝试编写的方式会更好。 看到这篇文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM