[英]Extracting variables from set of strings in python
我有一组字符串,我将其提取并存储到数组中。 其中一些包含我要提取的变量,问题是目前这些是字符串。 因此,例如,一个字符串看起来像
s1 = 'DataFile=scan1.dat'
其他人看起来像
s2 = 'NumberOfChannels=32'
我想要做的是取s1和s2并从它们中提取信息并将其存储为:
DataFile='scan1.dat'
NumberOfChannels=32
这些字符串看起来都与上面的相似。 它是一个包含字符串本身的变量,或者是一个包含整数的变量。 这是我在整数情况下的尝试(失败):
# ll is a string element of the big array
if ll.startswith('NumberOfChannels'):
print "found nChans"
idx = ll.index('=')
vars()[ll[:idx-1]] = int(ll[idx+1:])
任何可以帮助我的建议/外部模块将不胜感激
def convert(val):
"""
Attempt to coerce type of val in following order: int, float, str
"""
for type in (int, float, str):
try:
return type(val)
except ValueError:
pass
return val
def make_config(*args, **kwargs):
for arg in args:
try:
key,val = arg.split('=')
kwargs[key.strip()] = convert(val.strip())
except ValueError: # .split() didn't return two items
pass
return kwargs
s1 = 'DataFile=scan1.dat'
s2 = 'NumberOfChannels=32'
config = make_config(s1, s2)
这给你
{'DataFile': 'scan1.dat', 'NumberOfChannels': 32}
尽管这可能不是实现您正在尝试的最佳方法,但以下是一种实现方法:
string_of_interest = 'NumberOfChannels=32'
string_split = string_of_interest.split('=')
globals() [ string_split[0] ] = string_split[1]
编辑:(从评论),您可以尝试
globals() [ string_split[0] ] = eval(string_split[1])
如果您信任类型转换。
稍作修改,就可以使用exec
了。
In [1]: exec('NumberOfChannels = 32')
In [2]: NumberOfChannels
Out[2]: 32
In [3]: exec('DataFile="scan1.dat"')
In [4]: DataFile
Out[4]: 'scan1.dat'
请注意, 切勿将不可信的代码提供给exec
!
将随机变量加载到程序中通常不是一个好主意。 如果变量名称与程序中使用的名称相同怎么办?
如果要存储配置数据,请查看json 。
In [6]: import json
In [7]: json.dumps({'NumberOfChannels': 32, 'DataFile': 'scan1.dat'})
Out[7]: '{"DataFile": "scan1.dat", "NumberOfChannels": 32}'
In [8]: json.loads('{"DataFile": "scan1.dat", "NumberOfChannels": 32}')
Out[8]: {u'DataFile': u'scan1.dat', u'NumberOfChannels': 32}
In [9]: config = json.loads('{"DataFile": "scan1.dat", "NumberOfChannels": 32}')
In [10]: config['DataFile']
Out[10]: u'scan1.dat'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.