【问题标题】:How to obtain the filesize of a binary file without opening it as it is continuously being modified如何在不打开二进制文件的情况下获取文件大小,因为它不断被修改
【发布时间】:2018-11-30 09:32:19
【问题描述】:

我有一个二进制文件,它正在被传感器单元不断修改和扩展,文件中的数据以np.float32 格式存储。我需要通过读取文件的总长度来读取已经写入了多少这样的数据“块”。执行此操作的最佳方法是什么。我目前有以下代码,最初工作正常但速度变慢(如预期文件大小增加)。这是因为我每次都打开文件。 有没有办法使用os.path.getsize('file_path') 做到这一点?

with open(data_file, 'rb') as fid:
    return(len(np.fromfile(fid, np.float32)))

【问题讨论】:

  • 你能修改传感器/写作应用程序吗?如果您可以定期使用该 fsync() 并将缓冲的数据+文件大小报告给管道。读取管道将给出准确的尺寸。
  • 传感器程序是第三方写的,无法修改。
  • 您能否让传感器程序将其所有输出数据写入 STDOUT 而不是 OS 文件访问?

标签: python python-3.x file chunks


【解决方案1】:

我认为你可以做到以下几点:

import os

print(os.path.getsize("path/of/your/file"))

这将以字节为单位打印文件大小。

希望对你有帮助

【讨论】:

  • 这不会产生准确的结果。文件在提交到磁盘之前在内存中缓冲。您将获得自上次缓冲区刷新以来磁盘上的大小,而不是传感器写入的实际文件大小。例如如果传感器应用程序操作系统有一个 1MB 的写入缓冲区,并且写入应用程序没有调用 os.fsync(fd),那么文件将读取为零大小,直到写入 1MB。
【解决方案2】:

os.path.getsize 为您提供以字节为单位的大小。 np.float32 的大小为 4 字节,因为 32 指的是位数,但您也可以通过

>>> np.dtype(np.float32).itemsize
4

将文件大小除以项目大小将得到项目数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2017-02-02
    • 2011-12-02
    相关资源
    最近更新 更多