从txt读取参数

时间:2017-03-07 09:01:35

标签: python text

我有一个包含一些参数的txt文件。 txt文件如下所示:

par1 = 10.81
par2 = 0.3
par3 = 0.5 

我想在python中读取它并自动创建txt中指定的所有变量。

读取配置文件并创建其中列出的参数的最佳文件是什么?

特别说我有一堂课 我怎么能有这些?

class MyClass:
  def __init__(self)
     self.par1 = par1
     self.par2 = par2
     self.par3 = par3

4 个答案:

答案 0 :(得分:5)

危险守则

您可以使用exec。 考虑文件foo.txt

a = 1
b = 2
c = 3

和代码:

with open('foo.txt') as f:
    for line in f:
        exec(line)
print(a)
# 1
print(b)
# 2
print(c)
# 3

,正如标题所示,这是一种危险的方法,因为foo.txt可以轻松修改为包含

import os
os.remove('C:\system\a_very_important_system_file')

exec将很乐意执行它。

安全方法

foo.txt更改为JSON格式:

{"a": 1,
 "b": 2,
 "c": 3}

并使用json模块将其加载到您的代码中:

import json

with open('foo.txt') as f:
    variables = json.load(f)

print(variables["a"])
# 1

修改

如果您需要从未知的JSON文件动态启动实例属性,可以使用setattr

import json

class MyClass:
    def __init__(self):
        with open('foo.txt') as f:
            variables = json.load(f)
        for key, value in variables.items():
            setattr(self, key, value)

答案 1 :(得分:0)

除了@DeepSpace提供的答案之外,您还可以使用正则表达式限制允许的值:

import re

string = """
par1 = 10.81
par2 = 0.3
par3 = 0.5 
"""

rx = re.compile(r'^(?P<key>\w+)\s*=\s*(?P<value>[\d.]+)', re.MULTILINE)

for var in rx.finditer(string):
    exec("{} = {}".format(var.group('key'), var.group('value')))

print(par1)
# 10.81

此处,变量名称的值(0-9.)和a-z_仅允许使用数值。根据需要进行调整(即允许字符串)。

<小时/> 另一种方法是使用容器作为参数,即dict:

params = {match.group('key'): match.group('value')
            for match in rx.finditer(string)}
print(params)
# {'par1': '10.81', 'par2': '0.3', 'par3': '0.5'}

然后,您可以通过params['par1']调用您的变量。

答案 2 :(得分:-1)

您正在寻找评估功能 (array.length + 0)%array.length

答案 3 :(得分:-1)

使用readlines()

读取文件后
with open("sample.txt") as f:
    fr = f.readlines()

    fr = ['par1 = 10.81\n', 'par2 = 0.3\n', 'par3 = 0.5\n', 'par4 = 0.7\n', 'par5 = 0.9\n'] # Output

    fr = [f[:-1] for f in fr]

    frs = [f.split(" = ") for f in fr]

    for i, j in frs:
        exec("%s = %s" % (i,j))