我有一个包含键值对的文本文件,最后两个键值对包含类似JSON的对象,我希望将这些对象拆分成列并与其他值一起写入,使用键作为列标题。数据文件input.txt
的前三行如下所示:
InnerDiameterOrWidth::0.1,InnerHeight::0.1,Length2dCenterToCenter::44.6743867864386,Length3dCenterToCenter::44.6768028159989,Tag::<NULL>,{StartPoint::7858.35924983374[%2C]1703.69341358077[%2C]-3.075},{EndPoint::7822.85045874375[%2C]1730.80294308742[%2C]-3.53962362760298}
InnerDiameterOrWidth::0.1,InnerHeight::0.1,Length2dCenterToCenter::57.8689351603823,Length3dCenterToCenter::57.8700464193429,Tag::<NULL>,{StartPoint::7793.52927597915[%2C]1680.91224357457[%2C]-3.075},{EndPoint::7822.85045874375[%2C]1730.80294308742[%2C]-3.43363070193163}
InnerDiameterOrWidth::0.1,InnerHeight::0.1,Length2dCenterToCenter::68.7161350545728,Length3dCenterToCenter::68.7172034962765,Tag::<NULL>,{StartPoint::7858.35924983374[%2C]1703.69341358077[%2C]-3.075},{EndPoint::7793.52927597915[%2C]1680.91224357457[%2C]-3.45819643838485}
我们最终想出了一些行之有效的办法,但肯定有更好的办法:
^{pr2}$它生成的输出文件output.csv
如下所示
InnerDiameterOrWidth,InnerHeight,Length2dCenterToCenter,Length3dCenterToCenter,Tag,start1,start2,start3,end1,end2,end3
0.1,0.1,44.6743867864386,44.6768028159989,<NULL>,7858.35924983374,1703.69341358077,-3.075,7822.85045874375,1730.80294308742,-3.53962362760298
0.1,0.1,57.8689351603823,57.8700464193429,<NULL>,7793.52927597915,1680.91224357457,-3.075,7822.85045874375,1730.80294308742,-3.43363070193163
0.1,0.1,68.7161350545728,68.7172034962765,<NULL>,7858.35924983374,1703.69341358077,-3.075,7793.52927597915,1680.91224357457,-3.45819643838485
我们不想在将来写这样的代码。在
这样读取数据的最佳方式是什么?在
我会用:
cleancolumn
方法接受您的任何列,并在删除大括号、删除第一个::
之前的所有内容并拆分嵌入的“comma”之后返回一个元组(可能只有一个值)。通过使用itertools.chain.from_iterable()
,我们将从列生成的一系列元组再次转换为csv编写器的一个列表。在在处理第一行时,我们从相同的列生成一个标题行,将}头替换为6个展开的头。在
StartPoint
和{相关问题 更多 >
编程相关推荐