【问题标题】:Writing and overwriting to a file with a limit of 10 lines [closed]写入和覆盖限制为 10 行的文件 [关闭]
【发布时间】:2020-07-02 18:44:20
【问题描述】:

目前我有我的代码设置,它最多只能在文本文件中写入 10 行 使用计数器变量。再次启动程序后,我会删除文本文件的内容 以 truncate 开头,然后写入 10 行的新值。

我不想在开始时清除文件,而是想覆盖从 顶部,同时保持最大 10 行限制。我该怎么做呢?基本上我怎样才能用 10 行限制覆盖数据,而不必用截断来清除它。 (所以我可以保留一些旧数据)

print("Clearing all Previously stored pH Data")
f = open('PHAverage.txt', 'r+')
f.truncate(0)

counter=0

while True: #Polling Sensor Data
    pH=Sensor Value
    if counter<10:
        fb = open('PHAverage.txt','a+')
        fb.read
        fb.seek(0)
        fb.write(PH + "\n")
        fb.close()
    counter += 1

编辑**

根据目前的反馈,举个例子,我想在文件的开头开始覆盖数据,每 10 个轮询(或 10 个计数器)。 可以这样工作吗,

如果计数器%10== 0

    fb = open('PHAverage.txt','a+')
    fb.seek(0)
    fb.write(PH + "\n")
    fb.close()
    f.truncate()

计数器 += 1

【问题讨论】:

  • 请在您的帖子中添加示例。除非行是固定长度的,否则你有一个更复杂的算法:文件不是面向行的。
  • 这将是棘手的,因为行的长度通常因行而异,因此每次运行程序时,其中 10 行的结尾可能会有所不同——因此在 10 行之后停止可能会留下部分文件中的前一行。
  • 另请注意,您的代码中的 fb.read 什么都不做(因为调用函数时它不以 () 结尾——尽管这样做也有错误)。
  • 用示例重新编辑帖子

标签: python file limit truncate


【解决方案1】:

您只谈论 10 行,读取整个文件,更改条目并将其全部写回可能是最简单的。就像这个更新index指向的行的pH值的函数:

def savePH(filename, index, ph):
    with open(filename, 'r+') as f:
        data = list(f)
        data[index] = f"{ph}\n"
        f.seek(0)
        f.writelines(data)
        f.truncate()

这假设您已经有一个包含 10 行 pH 数据的文件,并且没有任何错误检查。

counter = 0
while True:
    pH = sensor_value
    savePH('PHAverage.txt', counter, ph)
    counter = (counter + 1) % 10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2012-04-19
    • 1970-01-01
    • 2023-03-28
    • 2016-05-07
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多