2012-02-06 22 views
10

我是一个Python新手,我搜索如何解析.txt文件。 我的.txt文件是计算信息等名称列表:解析文本文件中的键值对

myfile.txt的

var0 = 16
VAR1 = 1.12434E10
VAR2 = -1.923E-3
VAR3 = 920

如何读取值,并把它们放在myvar0, myvar1, myvar2, myvar3在Python?

回答

36

我建议在字典中存储的,而不是在单独的局部变量的值:

myvars = {} 
with open("namelist.txt") as myfile: 
    for line in myfile: 
     name, var = line.partition("=")[::2] 
     myvars[name.strip()] = float(var) 

现在访问他们为myvars["var1"]。如果名称都是有效的python变量名称,则可以将其放在下面:

names = type("Names", [object], myvars) 

并访问值,例如, names.var1

+0

在我的情况下,他在名称上使用strip()是多余的,但var上的换行符导致了问题。所以对我来说更好的是myvars [name] = float(var.strip()) – snow6oy 2016-01-07 18:24:44

+0

如果文件cas注释'#this is a comment line' – 2016-11-09 08:21:16

11

尝试Python标准模块configparser

+1

注:configparser抛出一个'MissingSectionHeaderError'如果文件不包含章节标题和OP的榜样呢没有标题。 @Lauritz的自定义解决方案可能比[使用configparser没有标头可能的解决方法]更简单(http://stackoverflow.com/questions/22501121/configparser-missingsectionheadererror-when-parsing-rsyncd-config-file-with -glob)。 – 7yl4r 2017-03-13 18:48:49

1

正如@kev所示,configparser模块是最好的选择。

然而,在某些情况下(有点难看,我承认),但非常简单而有效的方式做这个是重命名myfile.txtmyfile.py,做一个from myfile import *(在修复错字var 0 - >var0

但是,这是非常不安全,所以如果该文件来自外部源或可以由恶意攻击者写入,请使用某些验证数据而不是盲目执行它。

0

如果有上一行用逗号分隔值,这里的代码来解析出:

res = {}                                                

    pairs = args.split(", ")                                            
    for p in pairs:                                              
     var, val = p.split("=")                                           
     res[var] = val