首页 > 解决方案 > 使用 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 卡的最佳尺寸是多少?

标签: pythonpython-3.xraspberry-pisd-card

解决方案


推荐阅读