使用 Python 重复写入文件时,防止 SD 卡过早磨损

问题描述

我正在从 RaspBerry Pi 中的外部设备收集数据,每次收集 4 个字节,大约每秒 100 个样本。数据写入安装了操作系统的 SD 卡。

目前,我使用以下代码

with open('data.dat','ab') as f:
    while True:
        sample_word = read_sample() # read 32 bits from a peripheral
        f.write(sample_word.to_bytes(4,'big'))

由于数据收集将运行几个星期,我不想通过连续写入相同的块来磨损 SD 卡。 open() 函数一个缓冲参数,这表明我不需要为缓冲添加自定义逻辑:

buffering 是一个可选整数,用于设置缓冲策略。传递 0 以关闭缓冲(仅在二进制模式下允许),1 以选择行缓冲(仅在文本模式下可用),以及一个大于 1 的整数以指示固定大小块缓冲区的大小(以字节为单位)。当没有给出缓冲参数时,认缓冲策略的工作方式如下:

  • 二进制文件以固定大小的块缓冲;缓冲区的大小是使用试探法来选择的,尝试确定底层设备的“块大小”并回退到 io.DEFAULT_BUFFER_SIZE。在许多系统上,缓冲区的长度通常为 4096 或 8192 字节。

启发式方法是否能很好地猜测 SD 卡块大小? io.DEFAULT_BUFFER_SIZE 是 8k。将大小传递给 buffing 参数是否更安全?如果是,最近的 SD 卡的最佳尺寸是多少?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...