我在一个有限元建模程序中工作,我需要自动化数据上传过程(文件可以以 txt 格式打开),然后构造它们并获取 Excel 文件。下面是此类文件的示例(有时它们的下载略有不同,有多余的空格等),还值得注意的是,有些文件包含超过 1,000,000 行。
我已经找到了简单问题的简单解决方案,但在这种情况下,不可能用简单的分隔符来解决,这里如果数字是正数,那么它由空格分隔,如果它是负数,那么代替空格的是“-”,它是这个数字的一部分,特别是因为所有的数字都以指数形式表示(最后两列并不有趣)
*KEYWORD
*CONTROL_FORMING_MAXID
$ NPID MXIDN MXIDE MXIDH I2DYNAIN
0 0 0 0 0
*NODE
12236424 2.983630816E+01-4.042703176E+01-3.544279204E+01 0 0
12236425 2.983629904E+01-4.092704272E+01-3.544058904E+01 0 0
12236428 2.983640348E+01-4.042918554E+01-3.594280018E+01 0 0
12236429 2.983638822E+01-4.092920473E+01-3.594058796E+01 0 0
*KEYWORD
*CONTROL_FORMING_MAXID
$ NPID MXIDN MXIDE MXIDH I2DYNAIN
0 0 0 0 0
*BOUNDARY_SPC_NODE
428578 0 1 1 1 1 1 1
428579 0 1 1 1 1 1 1
428580 0 1 1 1 1 1 1
428581 0 1 1 1 1 1 1
429140 0 1 1 1 1 1 1
578780 0 1 1 1 1 1 1
578781 0 1 1 1 1 1 1
*NODE
428450-4.938889155E-02 1.417327727E-02-7.995352747E+00 0 0
428451-4.938006831E-02 5.143947265E-01-7.995257790E+00 0 0
428452 4.505296270E-01 5.143865897E-01-7.995272233E+00 0 0
428453 4.505218191E-01 1.416496122E-02-7.995366520E+00 0 0
428454-4.941766180E-02 1.357687718E-02-8.995286966E+00 0 0
428455-4.941014003E-02 5.137780139E-01-8.995196019E+00 0 0
428456 4.505026304E-01 5.137710659E-01-8.995210119E+00 0 0
428457 4.504959084E-01 1.356971048E-02-8.995300458E+00 0 0
428458-4.944581670E-02 1.296924219E-02-9.995248631E+00 0 0
428459-4.943942290E-02 5.131508731E-01-9.995162092E+00 0 0
首先,我感兴趣的是卸载 *NODE 字段上的数据,形式如下:
数字 | 十 | 是 | 是 |
---|---|---|---|
428450 | -4.938889155E-02 | 1.417327727E-02 | -7.995352747E+00 |
这样你就可以在 Excel 中处理结构化数据
我刚刚开始学习如何处理类似的任务,并发现 pandas 可以与 df 和正则表达式配合使用。我并不是想要现成的代码,我想知道哪种工具对于这样的任务有效,这样我就可以开始学习它了。
看起来您在那里有固定的位置,请查看read_fwf
方法 。您可以自己读取文件,找到所需的部分,并将位于所需位置的文件指针提供给此方法的输入(我有一个例子而不是文件
StringIO
,只需将其替换为通过以下方式读取文件即可open
):输出(格式不正确-列名被移动):