很简单的问题,但给我带来了一些麻烦:
我有
"('A', 'Open')" # type = str
,并希望:
('A','Open') # type = tuple
尝试使用.split(),仅将整个过程转换为元组(str)均未成功。
答案 0 :(得分:2)
有两种方法可以实现,都将字符串解析为Python代码。
看似更简单的选项是使用eval
。
稍微复杂一点,但更好的选择是使用ast.literal_eval
。
在Using python's eval() vs. ast.literal_eval()?中,一切都已经说过,为什么后者几乎总是您真正想要的。请注意,即使是eval
的官方文档,也应该使用ast.literal_eval
。
答案 1 :(得分:0)
怎么样?
import re
m_s = "('A', 'Open')"
patt = r"\w+"
print(tuple(re.findall(patt, m_s)))
答案 2 :(得分:0)
使用正则表达式如何?
In [1686]: x
Out[1686]: '(mono)'
In [1687]: tuple(re.findall(r'[\w]+', x))
Out[1687]: ('mono',)
In [1688]: x = '(mono), (tono), (us)'
In [1689]: tuple(re.findall(r'[\w]+', x))
Out[1689]: ('mono', 'tono', 'us')
In [1690]: x = '(mono, tonous)'
In [1691]: tuple(re.findall(r'[\w]+', x))
Out[1691]: ('mono', 'tonous')
答案 3 :(得分:0)
最可怕的是
eval("('A','Open')") #will return type as tuple
eval()以python表达式的形式评估并执行字符串