我编写了一个以空.txt
文件开头的python脚本。它将一系列数字数据添加到文件的第一列,然后关闭文件。代码实际上运行了3次,并且应该在插入空列之后将数据打印到新列中,这样在代码结束时,我们应该得到一个{3}的文件,其中包含3列对应3次运行的数据。我设法将代码设置为运行三次并生成3个具有已知元素的1d数组(称为“some_array”)。
以下是将数据写入.txt
文件的代码片段。
.txt
这将导致以下输出: (不幸的是,所有数据都添加在上一组数据的末尾)
# "some_array" which is updated for each run
data = "<Path to data.txt>"
with open(data,"a") as fName:
for item in some_array:
print('{:.2e}'.format(item), file=fName)
fName.close()
有没有办法插入空列并跳转到关闭文件之前的列的开头?这样我就可以获得三列数据,如下所示:
1.00e-3
2.00e-3
3.00e-3
4.00e-3
5.00e-3
6.00e-3
7.00e-3
8.00e-3
9.00e-3
答案 0 :(得分:2)
你可以这样做。每次首先读取文件内容然后将内容写回文件时,都可以添加以前的信息。
data = "file.txt"
array1 = [1, 2, 3, 4, 5]
with open(data, "r") as fName:
content = fName.readlines()
content = [x.strip() for x in content]
with open(data, "w") as fName:
for i in range(len(array1)):
if len(content) > i:
print(content[i] + '\t' + '{:.2e}'.format(array1[i]), file=fName)
else:
print('{:.2e}'.format(array1[i]), file=fName)
array2 = [6, 7, 8, 9, 10]
with open(data, "r") as fName:
content = fName.readlines()
content = [x.strip() for x in content]
with open(data, "w") as fName:
for i in range(len(array2)):
if len(content) > i:
print(content[i] + '\t' + '{:.2e}'.format(array2[i]), file=fName)
else:
print('{:.2e}'.format(array2[i]), file=fName)
array3 = [11, 12, 13, 14, 15]
with open(data, "r") as fName:
content = fName.readlines()
content = [x.strip() for x in content]
with open(data, "w") as fName:
for i in range(len(array3)):
if len(content) > i:
print(content[i] + '\t' + '{:.2e}'.format(array3[i]), file=fName)
else:
print('{:.2e}'.format(array3[i]), file=fName)
请注意,这只是一个示例,您可以修改它以实现目标任务
答案 1 :(得分:1)
如果您可以将所有数据保存在内存中,那么最简单的方法就是将其压缩以便写入:
# run_computation(j) returns the j-th data array
some_arrays = [run_computation(j) for j in range(n_columns)]
data = "<Path to data.txt>"
with open(data,"wt") as fName:
for item in zip(*some_arrays):
print(' '.join(n_columns * ['{:.2e}']).format(*item), file=fName)