在大文本fi中编辑单行

2024-09-29 19:33:39 发布

您现在位置:Python中文网/ 问答频道 /正文

每一天需要记录一组不同的整数。i、 电子邮箱:

#Here the values are initialized to the same value, however they will change as samples are taken
data = [[.25 for numData in range(4)] for numSecs in range(86400)]

显然,第一个索引长度为86400的二维数组(gah-its-python,LIST)是非常不切实际的。相反,我想创建一个文本文件,其中86400行的格式如下:

^{pr2}$

当取样时,我希望能够编辑这个文件,不,我希望能够编辑这个文件的行,它的numSec=取样的第二秒。例如,在numSec=2(午夜后2秒)时采集的样本会导致程序编辑该文件,以便:

0 .25 .25 .25 .25
1 .25 .25 .25 .25
2 .70 .10 .10 .10
...

看起来很简单,我甚至读过很多文章,它们演示了如何在文本文件中重写一个。问题是,它们都要求你读整个文件。我不希望我的程序每秒读取86400行。在

因此,我们得出了我的问题:我是否可以读取文本文件中的一行,对其进行编辑,然后将其写回文件中,而不必每次进行更改时都读取整个文件?在

另请注意,我运行的是ubuntu12.04(Precise),这是用于ROS节点的

p.p.S这个程序将运行任意天数,因此每“秒”的数据都可以被多次读取和重写。另外,我想使用文件的另一个原因是,如果需要关闭系统,我想保存分发,以备下次运行时使用。在


Tags: 文件thein程序编辑forhere记录
3条回答

您可能需要稍微修改一下,它假设所有行的长度相同。为此,我不得不将第一列填充到固定宽度。但是如果你不想要填充,你应该能够计算出1,2,3,4的数字,。。特定行前的数字。在

data = [[.25 for numData in range(4)] for numSecs in range(86400)]
length_line=0

def write_line(f, sec, data):
    line="{:6d}".format(sec) + " " +" ".join(
            ["{:.2f}".format(dd) for dd in data])+"\n"
    f.write(line)
    return len(line)

with open('output', 'w') as of:
    for i,d in enumerate(data):
        length_line=write_line(of, i, d)

with open('output', 'rb+') as of:
    # modify the 2nd line:
    n = 2
    of.seek(n*length_line)
    write_line(of, n, [0.10,0.10,0.10,0.10])
    # modify the 10th line:
    n = 10
    of.seek(n*length_line)
    write_line(of, n, [0.10,0.10,0.10,0.10])

我不确定存储345600(86400*4)乘以0.25是否有用。只需将默认值存储在第一行。而不是一次追加一行。如果时间戳没有按顺序排列,只需将它们按原样放入,在一天结束后,对文件内容进行一次排序,并用默认值填充丢失的时间戳。示例:

default: 0.25
2 .70 .10 .10 .10
3 .80 .20 .20 .20
1 .50 .30 .30 .30
5 .40 .30 .30 .30

稍后处理此文件以获取:

^{pr2}$

如果行的长度不同,那么修改后的行之后的所有内容都将处于错误的位置,您必须重写所有这些行。如果这些行都具有相同的长度,则可以通过计算文件中该行的偏移量seek()和{}来生成新数据。有关详细信息,请参见Python File Objects。在

相关问题 更多 >

    热门问题