在将新数据添加到文本文件中时如何跳转到下一列的开头?

时间:2017-03-05 01:58:59

标签: python text printing format

我编写了一个以空.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

2 个答案:

答案 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)