Python 中的重复字段格式
Repeating fields format in Python
我正在将自定义仪器二进制数据转换为 CSV 文件。
有 100 多个带有浮点数、整数和文本的字段。
我正在为此使用 bitstruct。
with open('instrument.dat','rb') as f:
with open('instrument.csv','w') as w:
header_format = 'u32u8u32t8192'
header_size = calcsize_in_bytes(header_format)
body_format = 'u4u4u1u1u1u1u4u16t96f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32s16s16f32f32u16u16f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f3232f32f32f32f32f32f32f32f32f32f32f32f32s16s16f32f32u16u16f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32<'
body_size = calcsize_in_bytes(body_format)
ver,instrument,date,comment = unpack(header_format, f.read(header_size))
w.write('{},{},{},{}\n'.format(ver,instrument,date,comment))
while True:
field1,...,fieldn = unpack(body_format,f.read(body_size))
我的问题是如何在 CSV 中写入正文部分?
我不想写一些麻烦的东西,比如:
w.write("{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}...{}\n".format(field1, field2,field3,field4,field5,field6,field7,fiel8,...,fieldN))
有什么简短而聪明的方法吗?
提前致谢。
更多详情:
二进制中有 100 多个具有不同值的字段。
格式是这样的:
u4u4u1u1u1u1u4u16t96f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32s16s16f32f32u16u16f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f3232f32f32f32f32f32f32f32f32f32f32f32f32s16s16f32f32u16u16f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32<
u
是无符号的int
,f
是float
,s
是text
都是位
我只需要逗号分隔值,这样我就可以将它们导入不同的程序。
Header1,Header2,Header3,…,Header100
Value1,value2,value3,…,value100
...
Value1,value2,value3,...,value100
最终解决方案,基于以上评论。
with open('instrument.dat','rb') as f:
with open('instrument.csv','w') as w:
header_format = 'u32u8u32t8192'
header_size = calcsize_in_bytes(header_format)
body_format = 'u4u4u1u1u1u1u4u16t96f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32s16s16f32f32u16u16f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f3232f32f32f32f32f32f32f32f32f32f32f32f32s16s16f32f32u16u16f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32<'
body_size = calcsize_in_bytes(body_format)
ver,instrument,date,comment = unpack(header_format, f.read(header_size))
w.write('{},{},{},{}\n'.format(ver,instrument,date,comment))
while True:
variables = unpack(body_format,f.read(body_size))
brackets = "{}," * len(variables)
brackets = brackes.rstrip(',') + "\n"
w.write(brakets.format(*variables))
我正在将自定义仪器二进制数据转换为 CSV 文件。 有 100 多个带有浮点数、整数和文本的字段。 我正在为此使用 bitstruct。
with open('instrument.dat','rb') as f:
with open('instrument.csv','w') as w:
header_format = 'u32u8u32t8192'
header_size = calcsize_in_bytes(header_format)
body_format = 'u4u4u1u1u1u1u4u16t96f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32s16s16f32f32u16u16f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f3232f32f32f32f32f32f32f32f32f32f32f32f32s16s16f32f32u16u16f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32<'
body_size = calcsize_in_bytes(body_format)
ver,instrument,date,comment = unpack(header_format, f.read(header_size))
w.write('{},{},{},{}\n'.format(ver,instrument,date,comment))
while True:
field1,...,fieldn = unpack(body_format,f.read(body_size))
我的问题是如何在 CSV 中写入正文部分? 我不想写一些麻烦的东西,比如:
w.write("{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}...{}\n".format(field1, field2,field3,field4,field5,field6,field7,fiel8,...,fieldN))
有什么简短而聪明的方法吗?
提前致谢。
更多详情:
二进制中有 100 多个具有不同值的字段。 格式是这样的:
u4u4u1u1u1u1u4u16t96f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32s16s16f32f32u16u16f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f3232f32f32f32f32f32f32f32f32f32f32f32f32s16s16f32f32u16u16f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32<
u
是无符号的int
,f
是float
,s
是text
都是位
我只需要逗号分隔值,这样我就可以将它们导入不同的程序。
Header1,Header2,Header3,…,Header100
Value1,value2,value3,…,value100
...
Value1,value2,value3,...,value100
最终解决方案,基于以上评论。
with open('instrument.dat','rb') as f:
with open('instrument.csv','w') as w:
header_format = 'u32u8u32t8192'
header_size = calcsize_in_bytes(header_format)
body_format = 'u4u4u1u1u1u1u4u16t96f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32s16s16f32f32u16u16f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f3232f32f32f32f32f32f32f32f32f32f32f32f32s16s16f32f32u16u16f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32f32<'
body_size = calcsize_in_bytes(body_format)
ver,instrument,date,comment = unpack(header_format, f.read(header_size))
w.write('{},{},{},{}\n'.format(ver,instrument,date,comment))
while True:
variables = unpack(body_format,f.read(body_size))
brackets = "{}," * len(variables)
brackets = brackes.rstrip(',') + "\n"
w.write(brakets.format(*variables))