【发布时间】:2020-09-30 12:23:23
【问题描述】:
我对如何解决我的问题没有正确的想法。我正在处理文本文件(*.inp - abaqus 作业文件),我想从中提取一些基本信息。到目前为止,我发现了两个主要问题:
- 此类文件非常大,即 500 000 行。
- 它们的结构并不总是类似于 csv 的
广告 1。由于数据量很大,我想包含 pandas 库以加快操作(将在优化循环中重复)
广告 2。具有“奇怪”结构的示例 *.inp 文件(请注意,“节点”和“元素”是代码中使用的实际名称,每个元素由多个节点组成,如 cube=element,每个立方体顶点=节点]:
*NODE
1, 0.0, 0.0, 3.0
2, -17.0, 5.5, 2.3
3, 51.0, 0.0, 639.8
5, 0.0, 5.5 , 31.0
...
145000, 31.3, 21.5, 99.8
*ELEMENT, ELSET=Name1, TYPE=Type1
1527450, 265156, 273237, 265019, 265021, 275728, 273221, 265599,
265146, 273583, 265020
1527449, 269279, 272869, 269277, 269479, 273130, 272862, 269278,
269489, 275729, 269627
1527448, 272250, 272858, 275350, 273327, 272851, 275730, 275731,
273346, 275732, 275733
...
1126546, 265180, 275352, 273263, 273237, 275736, 275737, 275738,
275739, 275740, 273246
*ELEMENT, ELSET=Name2, Type2
...
*SURFACE, NAME=Surf1
12345, S5
34567, S3
...
*STEP
*STATIC
1.0,,,1.0
*BOUNDARY
bc_1,1,3,0.0
bc_2,6,6,0.0
...
...
“*NODE”关键字下列出的值具有以下顺序: node_id, coord_x, coord_y, coord_z
这是模型中最大的数据集,这就是我想使用 pandas 的原因(像 csv 一样读取它)。对于这部分,我没有发现重大问题。
*ELEMENT" 关键字下列出的值有点复杂:
第 n 行:elementn_id、node1_id、node2_id、node3_id、node4_id、node5_id、node6_id、node7_id
第 n+1 行:node8_id、node9_id、node10_id
在这种情况下,pandas 将这部分代码作为两行(显然)导入,在 n+1 行的最后 7 列中包含 N/A 项。我使用 pd.read_csv 。请注意,从 1 到 10 的节点 id 一起形成一个元素(id 指定为第 n 行中的第一个东西)。
现在我说明问题:):
- 如何正确导入位于 *ELEMENT, ELSET=name1 和 *ELEMENT, ELSET=name2 之间的数据,我的目标是让矩阵中的每个元素仅使用 1 行,总共 11 列(第一个 - element_id , 2-11 - nodex_id)。
- 到目前为止,我将此 *.inp 文件划分为单独的文件以便能够对它们进行处理...现在我想在一个脚本中完成所有操作,即创建矩阵 A = [(node_id, coord_x, coord_y, coord_z ),...] 和矩阵 B = [(element_id, node1_id, node2_id, ... , node10_id),...] 一次。如果在这种情况下简单的 pd.read_csv 不能正常执行,该怎么做?有许多严格的字符串行不应该被导入或排除以加快脚本速度。
我的想法是将 *.inp 文件作为“打开”函数导入 python,然后添加某种标签/触发器以匹配应进一步使用的代码行(并且可能使用 pandas 处理),但在这种情况下我不使用 pandas 作为导入选项...
我相信我的问题对你们中的大多数人来说相当枯燥,但我并不是严格意义上的开发人员 :) 我不希望获得直接、现成的解决方案,而是希望获得您关于在哪里寻找潜在答案或工具的建议。
提前谢谢大家,祝你们有美好的一天, 楼主
【问题讨论】:
-
您需要换个方向思考,主要是因为元素中的节点数取决于元素类型(例如元素类型 S4 有 4 个节点),而且您需要熟悉约定用于生成输入文件。查看旧文档中
Getting started with Keywords edition中的第 2.2 节。 -
你好 Anbu,确实,每个元素使用不同数量的节点,从 1 到 20 不等。在这个例子中,我使用了 C3D10 元素,因为它们涵盖了我使用的所有模型的 90%。尽管如此,还是感谢您的反馈!
标签: python pandas csv text abaqus