我正在將自定義儀器二進制資料轉換為 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<
uis unsigned int, fis float, sistext都是位
我想要的只是逗號分隔的值,因此我可以將它們匯入到不同的程式中。
Header1,Header2,Header3,…,Header100
Value1,value2,value3,…,value100
...
Value1,value2,value3,...,value100
uj5u.com熱心網友回復:
最終解決方案,基于上述評論。
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))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/377127.html
