编程技术以减少文本文件大小

时间:2012-06-09 02:52:59

标签: python optimization file-io

我正在将多维数组数据写入文本文件。我这样做是明智的。文件的大小不断增长。我应该遵循哪些技术来获得输出文件的最小尺寸?

2 个答案:

答案 0 :(得分:5)

如果你的数组有很多零,你可以使用稀疏矩阵表示:而不是将整个矩阵写入文件,只写非零元素(当然,你需要逐个编写每个元素及其索引)。假设您要编写此矩阵:

0 0 0 2
1 0 0 0
0 0 0 0
0 0 3 0
0 0 0 0

您可以将其写入文件:

0 3 2
1 0 1
3 2 3

在每一行中,第一个数字是行,第二个是列,第三个是存储值。

如果您将文件写为文本,则可以切换为二进制格式:当您编写文本时,您将为每个数字使用一个字节;在二进制文件中,每个数字使用固定数量的字节,而不必表示空格和换行符:

如果使用文本格式,将数字100 200 300写入文件需要11个字节。但是如果你写三个16位整数,它们可能会用6个字节写入。在Python中,使用“wb”和“rb”模式打开二进制文件,然后将它们写为字节:

f = open('file', 'wb')
f.write('%c' % 123)
f.close()

或者 - 更有效率,

import array
f = open('file', 'wb')
data = array.array('B')
data.append(1)
data.append(2)
data.append(3)
data.tofile(f)
f.close()

否则,您应该尝试使用标准技术压缩数据结构。由于您使用python标记了问题,因此您可能会对这些Python libraries for data compression

感兴趣

还有一个很好的introduction to data compression,在理论方面有点沉重,以防你想了解更多。

答案 1 :(得分:1)

由于数据非常稀疏,您可以使用SciPyPackages / Sparse关于I / O可以查看this

稀疏矩阵只是一个具有大量零值的矩阵。

所以,如果你想自己编写代码。保存sparse matrix时,只需要输出no-zero元素的位置和元素值。例如:

sparse matrix

1 0 0 1
0 0 0 0
0 0 5 0
0 0 0 10

需要保存到文件的数据是:

0 0 1
0 3 1
2 2 5
3 3 10

sparse matrix种植者,此方法可以减少要保存到file的数据。

何时使用data file,您只需要从数据中恢复original matrix

祝你好运