相关疑难解决方法(0)

Python:YAML 函数字典:如何加载而不转换为字符串

我有一个 YAML 配置文件,其中包含一个字典,如下所示:

"COLUMN_NAME": column_function
Run Code Online (Sandbox Code Playgroud)

它将字符串映射到函数(存在并且应该被调用)。

但是,当我使用 加载它时yaml,我看到加载的字典现在将字符串映射到字符串:

'COLUMN_NAME': 'column_function' 
Run Code Online (Sandbox Code Playgroud)

现在我不能按预期使用它 -'column_function'不指向column_function.

加载 mydict以便映射到我的函数的好方法是什么?在对这个问题进行了一些搜索和阅读之后,我对使用eval或类似的东西非常谨慎,因为配置文件是用户编辑的。

我认为这个线程是关于我的问题,但我不确定解决它的最佳方法。

  • getattr并且setattr我认为是因为它们对实例化的对象进行操作,而我有一个简单的脚本。
  • globals()vars()locals()为我提供dicts 个变量,我想我应该globals()根据this 使用

我应该为我的配置中的每个键值对查找其中的字符串dict吗?这是一个好方法吗:

for (key, val) in STRING_DICTIONARY.items():
    try: 
        STRING_DICTIONARY[key] = globals()[val]   
    except KeyError:
        print("The config file specifies a function \"" + val 
               + "\" for column \"" + key 
               + "\". No such function …
Run Code Online (Sandbox Code Playgroud)

python string dictionary yaml python-3.x

5
推荐指数
1
解决办法
3989
查看次数

我可以使用变量字符串来引用列表吗?

我有一份字典中的股票价格清单和价值清单.我想通过列表来获取每天股票的价值,但是当我使用变量访问数据时,我无法解析列表中的位置.

这是一个例子:

goog = [12,132,124,234,234]
msft = [432,23,234,54,23]

num_days = 5
stocks_i_own = {'goog':50, 'msft':50}

for days in range(0,num_days):
    for stock in stocks_i_own:
        print days, stock, stocks_i_own[stock]
        print stock[days] #prints just 'g' not the value on day0
        print 'vaue on ', days, ' is ', stock[days] *  stocks_i_own[stock]
Run Code Online (Sandbox Code Playgroud)

问题是当我stock[days]用来获取数据时.我知道库存有正确的值('goog'或'msft'),天数有正确的值(范围为0-4),但是当它们一起使用时,我不会从列表中获取数据,而是获取位置关于这个词本身.它是有道理的,因为像:

name = 'google'
name[0]
Run Code Online (Sandbox Code Playgroud)

会返回g(它在我的情况下做)但是有没有办法让python不要看到我提供它作为一个字符串而是引用列表?

python arrays

4
推荐指数
2
解决办法
352
查看次数

来自 ConfigParser 的就地替换

我手头有一个非常棘手的情况(就我的标准而言)。我有一个脚本需要从ConfigParser读取脚本变量名称。例如,我需要阅读

self.post.id
Run Code Online (Sandbox Code Playgroud)

从 .cfg 文件并将其用作脚本中的变量。我如何实现这一目标?

我想我的查询不清楚。.cfg 文件类似于:

[head]
test: me
some variable : self.post.id
Run Code Online (Sandbox Code Playgroud)

这个 self.post.id 将在运行时被替换,从脚本中获取值。

python configuration-files

0
推荐指数
1
解决办法
4691
查看次数