我是Python的新手,我搜索如何解析.txt文件。 我的.txt文件是一个名单,其计算信息如下:
myfile.txt的
var0 = 16
var1 = 1.12434E10
var2 = -1.923E-3
var3 = 920
如何读取值并将它们放在python中的myvar0, myvar1, myvar2, myvar3
?
答案 0 :(得分:46)
我建议将值存储在字典中而不是存储在单独的局部变量中:
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
。
答案 1 :(得分:4)
我个人通过创建一个只包含所有参数作为变量的.py文件来解决这个问题 - 然后做了:
include PARAMETERS.py
在需要参数的程序模块中。
它有点难看,但非常简单易用。
答案 2 :(得分:1)
正如@kev建议的那样,configparser模块是可行的方法。
然而在某些情况下(我承认有点难看)但是非常简单有效的方法是将myfile.txt
重命名为myfile.py
并执行from myfile import *
(在您之后)修复拼写错误var 0
- > var0
)
然而,这是非常不安全,因此如果文件来自外部源或可以由恶意攻击者编写,请使用某些来验证数据,而不是盲目地执行它。
答案 3 :(得分:0)
如果一行上有多个以逗号分隔的值,这里是解析它的代码:
res = {}
pairs = args.split(", ")
for p in pairs:
var, val = p.split("=")
res[var] = val
答案 4 :(得分:0)
当文件格式更加精美时(例如注释),请使用 pandas.read_csv 。
val = u'''var0 = 16
var1 = 1.12434E10
var2 = -1.923E-3
var3 = 920'''
print(pandas.read_csv(StringIO(val), # or read_csv('myfile.txt',
delimiter='\s*=\s*',
header=None,
names=['key','value'],
dtype=dict(key=numpy.object,value=numpy.object), # or numpy.float64
index_col=['key']).to_dict()['value'])
# prints {u'var1': u'1.12434E10', u'var0': u'16', u'var3': u'920', u'var2': u'-1.923E-3'}
答案 5 :(得分:0)
字典理解(PEP 274)可用于较短的表达式(60个字符):
d = {k:float(v) for k, v in (l.split('=') for l in open(f))}
编辑:由于@jmb建议(避免使用.readlines()
),从72个字符缩短到60个字符。