如何在Python中将浮点数列表输出到二进制文件
我在Python里有一串浮点数:
floats = [3.14, 2.7, 0.0, -1.0, 1.1]
我想把这些数写入一个二进制文件,使用IEEE 32位编码。请问在Python中怎么做比较好呢?我的列表大约有200MB的数据,所以最好是速度不要太慢。
因为我只有5个数,所以我只想要一个20字节的文件作为输出。
8 个回答
14
标准库中的数组模块可能比大家推荐的结构模块更适合这个任务。处理200MB的数据时,使用数组的性能应该会好很多。
如果你想看看不同的选择,可以试着在你的系统上使用类似这样的工具进行性能测试。
25
import struct
s = struct.pack('f'*len(floats), *floats)
f = open('file','wb')
f.write(s)
f.close()
50
亚历克斯说得没错,这样做效率更高:
from array import array
output_file = open('file', 'wb')
float_array = array('d', [3.14, 2.7, 0.0, -1.0, 1.1])
float_array.tofile(output_file)
output_file.close()
然后可以这样读取数组:
input_file = open('file', 'rb')
float_array = array('d')
float_array.fromstring(input_file.read())
array.array
对象还有一个 .fromfile
方法,可以用来读取文件,如果你事先知道里面有多少个项目(比如通过文件大小,或者其他方法)