[英]Write Raw Numbers to Disk
在我看来,我不知道如何将原始数值写入磁盘。 我将如何在Python或C ++中做到这一点?
我正在运行一些模拟并将中间结果写入磁盘,以使它在崩溃时不会从头开始。 可悲的是,这些值在我的硬盘驱动器上占用了千兆字节的空间。
以浮点数的形式将数值写入磁盘会占用更少的磁盘空间,还是我没有考虑其他开销?
您可以滚动自己的二进制格式并使用它,但这可能不是一个好主意。
如果使用Python处理数字数据,则几乎可以肯定使用numpy
。 如果你不使用numpy
,你应该考虑使用numpy
,这很棒。
一旦将数据存储在numpy
数组中,就可以使用它们的save
方法。
Python中的一般方法是使用struct
模块 。
import struct
print struct.pack("!d", 3.14159)
(你可以选择使用什么字节顺序 - 我用!
来指示网络字节顺序的可移植性 - 或者不使用指示器来使用本机字节排序。实际上,我不确定IEEE 754是否指定字节顺序,所以我'我不知道该推荐什么。也许使用默认值是最好的。)
在优化之前,请确保至少执行类似的操作(将数字类型存储在磁盘上的二进制表示形式)。 如果您在此时并且文件大小仍然太大,则可以考虑不同类型的压缩格式。
#include <iostream>
#include <fstream>
typedef int32_t my_numeric_type;
int main()
{
using namespace std;
{
ofstream output_file("numbers.dat", ios::binary);
if( !output_file )
{
cout << "Failed to open file for writing" << endl;
return 1;
}
for( my_numeric_type i = 0 ; i <= 1000; ++i )
output_file.write(reinterpret_cast<const char*>(&i), sizeof(i));
}
{
ifstream input_file("numbers.dat", ios::binary);
if( !input_file )
{
cout << "Failed to open file for reading" << endl;
return 1;
}
my_numeric_type i;
while( input_file.read(reinterpret_cast<char*>(&i), sizeof(i)) )
cout << i << endl;
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.