在Python中,如何在文件中找到文本块?

在Python中,如何在文件中找到文本块?,python,ascii,textblock,web-crawler,Python,Ascii,Textblock,Web Crawler,我有一个ASCII格式的文件,我想找到一块用括号括起来的文本,并从该文件中获取信息。这些块如下所示: "material" "DmeMaterial" { "id" "elementid" "12af09eb-3a16-42a9-93eb-a9081a056d6d" "name" "string" "BodyParts_diffuse" "mtlName" "string" "models/characters/background/punk_01/BodyParts_d

我有一个ASCII格式的文件,我想找到一块用括号括起来的文本,并从该文件中获取信息。这些块如下所示:

"material" "DmeMaterial"
{
    "id" "elementid" "12af09eb-3a16-42a9-93eb-a9081a056d6d"
    "name" "string" "BodyParts_diffuse"
    "mtlName" "string" "models/characters/background/punk_01/BodyParts_diffuse"
}
我可以加载文件,并在控制台中使用以下代码将数据很好地打印出来:

filePath = "F:\SteamLibrary\SteamApps\common\SourceFilmmaker\content_custom\mod_dmx\material_test.dmx"

with open(filePath, "r+") as f:
    data = f.read()
    print data
    f.close()

但是我想在文本中找到material dmemarmatial,然后抓住括号中的信息,特别是mtlName和name。在我看来,这是一系列复杂的步骤,我希望有人能帮助我或引导我走上正确的道路

对于格式化数据来说,正则表达式总是一种选择。下面的正则表达式符合您的示例,但如果没有关于您的数据的进一步信息,我无法确定。如果它适合你的情况

[\w-]+[\w-]+\s*{\n\s*[\w-/]+[\w-/]+ [\w-/]+\n+}

这段代码适用于您的示例:

import re
my_regex=re.compile('("[\w-]+") ("[\w-]+")\s*\{\n(\s*("[\w\-/]+") ("[\w\-/]+") ("[\w\-/]+")\n)+\}')
my_regex.findall(my_string)

PS:如果您不想捕获引用,请将它们从括号中移出,例如从[\w-]+移到[\w-]+

这是一种方法:

filePath = 'F:\SteamLibrary\SteamApps\common\SourceFilmmaker\content_custom\mod_dmx\material_test.dmx'
data_list = []

with open(filePath, "r+") as f:
data = f.read()
marker, pos = '"material" "DmeMaterial"', 0
while data.find(marker) != -1:  # Loops as long as the marker is present
    pos = data.find(marker)     # Finds first occurrence of marker
    start = data.find('{', pos) # Finds first occurrence of { after marker
    stop = data.find('}', pos)  # Finds first occurrence of } after marker
    data_list.append(data[start : stop+1].replace('\n', ''))
    data = data[stop+1:]

数据列表将包含所有块。

该文件格式类似于JSON,但没有:和,该文件格式称为DataModel,这是源引擎的模型格式。如果您需要更多信息,这里是一个实际的文件本身,数据列表似乎正在返回声明时的状态,没有变量。这可能是我宣布的方式吗?