python - 编辑大型文本文件中的一行

标签 python text-files

所以我需要记录一组 4 个整数,它们的值在一天中的每一秒都不同。即:

#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 其 python,LIST)是非常不切实际的。相反,我想创建一个 86400 行格式如下的文本文件:

numSec data0 data1 data2 data3

0 .25 .25 .25 .25
1 .25 .25 .25 .25
2 .25 .25 .25 .25
...

随着采样的进行,我希望能够编辑该文件,不,我希望能够编辑其 numSec = 第二次采样的文件的行。例如,在 numSec = 2(午夜后 2 秒)采集的样本会导致我的程序编辑文件,以便:

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

看起来很简单,我什至阅读了一堆演示如何在文本文件中重写单个的帖子。问题是,它们都要求您阅读整个文件。我不希望我的程序每秒读取 86,400 行。

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

附言我应该注意到我正在运行 Ubuntu 12.04 (Precise),这是用于 ROS 节点

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

最佳答案

您可能需要稍微修改一下,它假定所有行的长度都相同。为此,我必须将第一列填充到固定宽度。但是如果你不想填充,你应该能够计算特定行之前的 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])

关于python - 编辑大型文本文件中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17034895/

相关文章:

python - Python 中的纯静态类 - 使用元类、类装饰器还是其他东西?

java - 如何计算 float 文件的标准偏差?

c++ - 在 C++ 中计算文本文件中的字母数字字符

c++ - 如何从文本文件中填充指针数组?

javascript - 使用 Javascript 创建日志文本文件

python - pip 从 python 中自己的(命名空间)包安装子包

python - 排除\S正则表达式匹配中的字符

java - 脚本在终端中有效,但在使用 ProcessBuilder 运行时无效

java - jython 独立 jar 减少了软件包列表?

java - 在 java 中使用数组对文本文件进行排序时丢弃的第一个元素