通过python获取{}内文件的路径

2024-02-04

我有一个代码,我只想返回 /X/Y/Z/C、/X/Y/Z/D、/X/Y/Z/E(无论 -tree 之后是什么)。 它实际上应该读取文件,忽略所有内容,直到看到 WFS,然后获取 {} 中的信息,找到树,然后给我返回的路径。

我是 Python 初学者。匹配模式不起作用,因为我认为路径每天都在变化。 任何帮助将不胜感激。

代码:

DEFAULTS
{
    FS
    {
        -A      AAA
        -B

    }  -aaaaaa
    C
    {

    } 
}

D "FW0" 
{
} 

WFS "C:" XXXX:"/C"
{
    -trees
        "/X/Y/Z/C"
        "/X/Y/Z/D"
        "/X/Y/Z/E"
    -A  AAA
}

基于状态机的词法分析器可以可靠地完成这一任务。

它识别我们感兴趣的文件结构:嵌套花括号、命名节(下一行上的标识符和左大括号;这一个只关心顶级节)和子句(以-identifier在顶级部分内,后面可能是数据行,并以另一个子句或该部分的末尾结束)。

然后它继续读取文件并打印找到的数据行(如果它们恰好位于我们感兴趣的部分和子句中)。它还会在找到它们时设置一个标志,以便在该子句结束后立即退出。

f = open("t.txt")

import re

identifier=None
brace_level=0
section=None
clause=None
req_clause_found=False
def in_req_clause(): return section=='WFS' and clause=='trees'

for l in (l.strip() for l in f):
    if req_clause_found and not in_req_clause(): break

    m=re.match(r'[A-Z]+',l)    #adjust if section names can be different
    if m and section is None:
        identifier=m.group(0)
        continue
    m=re.match(r'\{(\s|$)',l)
    if m:
        brace_level+=1
        if identifier is not None and brace_level==1:
            section=identifier
            identifier=None
        continue
    else: identifier=None
    m=re.match(r'\}(\s|$)',l)
    if m:
        brace_level-=1
        if brace_level==0: section=None
        clause=None
        continue
    m=re.match(r'-([A-Za-z]+)',l)   #adjust if clause names can be different
    if m and brace_level==1:
        clause=m.group(1)
        continue
    m=re.match(r'"(.*)"$',l)
    if m and in_req_clause():
        print m.group(1)
        req_clause_found=True
        continue

在示例中,输出

/X/Y/Z/C
/X/Y/Z/D
/X/Y/Z/E
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过python获取{}内文件的路径 的相关文章

随机推荐