在Python中,如何在文件中找到文本块?
我有一个ASCII格式的文件,我想找到一块用括号括起来的文本,并从该文件中获取信息。这些块如下所示:在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
"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,这是源引擎的模型格式。如果您需要更多信息,这里是一个实际的文件本身,数据列表似乎正在返回声明时的状态,没有变量。这可能是我宣布的方式吗?