我需要解析由大括號分隔信息的文件,例如:解析文件brakets
Continent
{
Name Europe
Country
{
Name UK
Dog
{
Name Fiffi
Colour Gray
}
Dog
{
Name Smut
Colour Black
}
}
}
以下是我在Python
from io import open
from pyparsing import *
import pprint
def parse(s):
return nestedExpr('{','}').parseString(s).asList()
def test(strng):
print strng
try:
cfgFile = file(strng)
cfgData = "".join(cfgFile.readlines())
list = parse(cfgData)
pp = pprint.PrettyPrinter(2)
pp.pprint(list)
except ParseException, err:
print err.line
print " "*(err.column-1) + "^"
print err
cfgFile.close()
print
return list
if __name__ == '__main__':
test('testfile')
都試過,但這個失敗一個錯誤:
testfile
Continent
^
Expected "{" (at char 0), (line:1, col:1)
Traceback (most recent call last):
File "xxx.py", line 55, in <module>
test('testfile')
File "xxx.py", line 40, in test
return list
UnboundLocalError: local variable 'list' referenced before assignment
我需要做些什麼來完成這項工作? 是否比pyparsing更好的解析器?
偏離主題,但最好不要使用'list'作爲變量名,因爲它是保留在python – oleg
我可以提出你的解決方案與基於遞歸的算法。它是否符合你的要求(將整個數據分割爲'{'once'和rsplit'}'一次,外部部分應該被解析爲返回字典的鍵值,而內部部分應該被傳遞給遞歸函數本身。 ) – oleg
請顯示想要的結果。 –