2017-05-07 55 views
0

我知道,有着名的Python配置解析器,但我认为对于这种配置格式,解析器不会是最好的选择。python从配置文件提取值

"AppState" 
{ 
    "appid"  "740" 
    "Universe"  "1" 
    "name"  "Counter-Strike Global Offensive - Dedicated Server" 
    "StateFlags"  "4" 
    "installdir"  "Counter-Strike Global Offensive Beta - Dedicated Server" 
    "LastUpdated"  "1492880350" 
    "UpdateResult"  "0" 
    "SizeOnDisk"  "14563398502" 
    "buildid"  "1771538" 
    "LastOwner"  "76561202168992874" 
    "BytesToDownload"  "6669177712" 
    "BytesDownloaded"  "6669177712" 
    "AutoUpdateBehavior"  "0" 
    "AllowOtherDownloadsWhileRunning"  "0" 
    "UserConfig" 
    { 
    } 
    "MountedDepots" 
    { 
     "731"  "3148506631334968252" 
     "740"  "8897003951704178635" 
    } 
} 

例如如何以最佳方式提取“buildid”的值?由于我需要多次使用配置文件工作,我只是寻找这种格式的最简单的方法。

+0

你如何得到这个配置文件?上游解决问题可能更容易,也更稳健。为什么不使用合法的JSON,它可以通过正确的模块轻松解析? – timgeb

回答

0

如果你可以看到它作为一个普通的文件使用:

import re 
with open('myfile.extension') as data: 
    for line in data: 
     if 'buildid' in line: 
      print re.findall('\d+', line) 
      break 
0

Python 2解决方案:

with open("config.txt","r") as fp: 
    line_list = [c.strip() for c in fp.readlines()] 
    for line in line_list: 
     if "buildid" in line: 
      buildid = line.split()[1] 
      print int(buildid[1:-1]) 
      break 

输出:

1771538 

config.txt包含:

"AppState" 
{ 
    "appid"  "740" 
    "Universe"  "1" 
    "name"  "Counter-Strike Global Offensive - Dedicated Server" 
    "StateFlags"  "4" 
    "installdir"  "Counter-Strike Global Offensive Beta - Dedicated Server" 
    "LastUpdated"  "1492880350" 
    "UpdateResult"  "0" 
    "SizeOnDisk"  "14563398502" 
    "buildid"  "1771538" 
    "LastOwner"  "76561202168992874" 
    "BytesToDownload"  "6669177712" 
    "BytesDownloaded"  "6669177712" 
    "AutoUpdateBehavior"  "0" 
    "AllowOtherDownloadsWhileRunning"  "0" 
    "UserConfig" 
    { 
    } 
    "MountedDepots" 
    { 
     "731"  "3148506631334968252" 
     "740"  "8897003951704178635" 
    } 
} 

N.B .:如果可能,请使用适当的JSON作为配置文件。使用JSON是安全的。

+0

是的,我喜欢JSON,但可悲的是这个配置不是由我自己生成:(。 – kreishna

+0

对不起,听到这个。上面的代码在这种情况下工作正常吗? – arsho