不断更新Fi

2024-04-23 22:17:54 发布

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

我有一个档案,里面有我拥有的每种水果的编号。然后我需要每分钟编辑它以保持它的最新状态。在

apples: 3
bananas: 6
oranges: 12
total: 21 fruits

我想用python编辑这个文件。但是,我遇到了几个问题:

1)我目前正在使用以下读/写。在

^{pr2}$

是否有更好/更有效的方法(无内存映射)。我尝试过使用f.seek(offset,from_what),但这有它自己的问题(如果apple从1位数变成2位数,它会抛出文件的其余部分)。在

2)我如何看待它的变化?我试着做“tail-f”,但是我现在编辑文件的方式会附加整个新文件。在

3)当我进入while look时,我一直在编辑文件,所以每当我试图对文件进行cat或vim时,它都是不完整的!理想情况下,我打开文件,我可以看到整个文件,并看到它的更新。在

谢谢你的阅读!在


Tags: 文件方法内存编辑状态档案编号total
2条回答

您可以使用“w+”或“r+”模式进行读写。当你以文本模式打开一个文件时,默认情况下它是完全缓冲的。要查看实时更新,您必须flush每次写入或以行缓冲模式打开文件(buffering=1)。
此外,您不能使用tail -f,因为文件没有附加。要观看实时更新,您必须反复调用cat,所以watch cat fruits.txt也可以。在

我在这里模拟了你的情景。在

from time import sleep

fruits = dict(apple=1, banana=2, orange=3)
with open('fruits.txt', 'w+', buffering=1) as f:
    for _ in range(20):
        for fruit, count in fruits.items():
            f.write('{}: {}\n'.format(fruit, count))

        f.seek(0)
        for line in f:
            line = line.strip().split(':')
            line[1] = int(line[1]) + 1
            fruits.update((line,))
        f.seek(0)
        sleep(1)

最好的选择是读入文件并将水果的数量解析为变量。然后做你的数学(加3个苹果或其他什么),然后重写文件。在

你也许可以用一个字典做到最好,其中的键是你的水果名称,值是水果的数量。只需编写一个函数,该函数接收您的文件并填写字典,然后用您的数学更新字典,然后编写一个函数,将您的词典以您想要的格式写入文件。这应该相对简单。在

相关问题 更多 >