正在读取括号“{”中包含的特定关键字的文本文件

2024-10-01 17:39:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想读一个文本文件,如下所示。 它有几何名称-->;“hvac、出气口、入口、薄板、风管和墙”

在这种情况下只有6个,但我可能会根据不同的CFD模拟过程而有所不同。在

我只想提取几何体名称及其对应的“类型”。在我的例子中,几何结构和类型分别是“hvac、出气口、进气口、片层、风管和墙”和“墙和补片”。在

我应该使用XML解析还是只搜索{\n'和'}\n'关键字后面的字符串。在

geometry
{
    hvac
    {
        type            wall;
        inGroups        1(wall);
        nFaces          904403;
        startFace       38432281;
    }
    OUTLET
    {
        type            patch;
        nFaces          8228;
        startFace       39336684;
    }
    INLET
    {
        type            patch;
        nFaces          347;
        startFace       39344912;
    }
    Lamelle
    {
        type            wall;
        inGroups        1(wall);
        nFaces          204538;
        startFace       39345259;
    }
    duct
    {
        type            wall;
        inGroups        1(wall);
        nFaces          535136;
        startFace       39549797;
    }
    wall
    {
        type            wall;
        inGroups        1(wall);
        nFaces          118659;
        startFace       40084933;
    }
}

Tags: gt名称类型type情况patch文本文件wall
1条回答
网友
1楼 · 发布于 2024-10-01 17:39:41

答案取决于是否支持整个OpenFOAM的字典格式。在

如果只需要支持与问题中显示的格式类似的格式,那么像\b(\w+)\s+{\s+type\s+(\w+);这样的简单regex就可以了:https://regex101.com/r/yV8tK2/1。如果您完全控制如何创建这个字典,那么这是您的选择,尽管在这种情况下,直接从创建字典的代码中获取所需的信息可能更简单。在

然而,OpenFOAM的字典格式比您的示例要丰富得多。它可以允许^ {CD2}}指令,可以允许ReGEXS作为键,可以允许使用^ {CD3}语法引用其他键,可以允许注释、C++代码片段和可能更多的(我不假装对它很熟悉)。一个典型的例子是两个字典:

   File data.incl:

baseType wall;

   File data

#inputMode merge;
#include "data.incl"

geometry {
    /* foo {    
        type wrongType; // a commented entry
    } */ 
    foo {
        type $baseType; // this will expand to wall
        ...
    }
    "(bar|buz)" {  // this will match bar and buz
         ...
    } 
}

如果你需要解析任何这样的字典,那么我强烈建议你用C++编写代码,使用标准的OpenFo沫类,这样你就可以在几行代码中完成这项工作。在

相关问题 更多 >

    热门问题