python能否读取bin文件_如何读取.bin文件?

给你:import struct

class Particle:

"""A single particle. Attributes added in BinFile."""

pass

class BinFile:

"""Parse and store the contents of a RealFlow .bin file."""

def __init__(self, fname):

self.bindata = open(fname, "rb").read()

self.off = 0

self.verify = self.peel("=i")[0]

assert self.verify == 0xfabada

self.name = self.string(250)

(self.version, self.scale, self.fluid_type, self.simtime, self.frame_number,

self.fps, self.num_particles, self.radius) = self.peel("=hfifiiif")

self.pressure = self.peel("=fff")

self.speed = self.peel("=fff")

self.temperature = self.peel("=fff")

if self.version >= 7:

self.emitter_position = self.peel("=fff")

self.emitter_rotation = self.peel("=fff")

self.emitter_scale = self.peel("=fff")

self.particles = [self.peel_particle() for i in range(self.num_particles)]

def peel_particle(self):

"""Read one particle from the file."""

p = Particle()

p.position = self.peel("=fff")

p.velocity = self.peel("=fff")

p.force = self.peel("=fff")

if self.version >= 9:

p.vorticity = self.peel("=fff")

if self.version >= 3:

p.normal = self.peel("=fff")

if self.version >= 4:

p.neighbors = self.peel("=i")[0]

if self.version >= 5:

p.texture = self.peel("=fff")

p.infobits = self.peel("=h")[0]

(p.age, p.isolation_time, p.viscosity, p.density, p.pressure, p.mass,

p.temperature, p.id) = self.peel("=fffffffi")

print p.id, p.neighbors, p.position

return p

def peel(self, fmt):

"""Read some struct data from `self.bindata`."""

data = struct.unpack_from(fmt, self.bindata, self.off)

self.off += struct.calcsize(fmt)

return data

def string(self, length):

s = self.bindata[self.off:self.off+length].split("\0")[0]

self.off += length

return s

b = BinFile("Circle0100001.bin")

print "Name:", b.name

print "Particles:", b.num_particles

print "Position of first particle", b.particles[0].position

当对样本数据运行时,它将打印:

^{pr2}$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值