【问题标题】:Convert string to tuple in python [duplicate]在python中将字符串转换为元组[重复]
【发布时间】:2019-01-04 08:31:00
【问题描述】:

很简单的问题,但给我带来了一些麻烦:

我有

 "('A', 'Open')" # type = str

并希望:

 ('A','Open') # type = tuple

尝试使用 .split(),只是将整个内容转换为 tuple(str),但没有成功。

【问题讨论】:

  • 这个"('A', 'Open')" 来自哪里?
  • import ast; my_tuple = ast.literal_eval(my_string)
  • @L3viathan inbuilt eval() 自己可以做到,不需要外部库。
  • @meW 谢谢...不知道这个..会读一读
  • @meW,不要建议使用eval,如果没有明确的警告,那是有潜在危险的。

标签: python


【解决方案1】:

有两种方法可以实现,都将字符串解析为 Python 代码。

看似更简单的选择是使用eval

稍微复杂但更好的选项是使用ast.literal_eval

Using python's eval() vs. ast.literal_eval()? 中已经说明了一切,为什么后者几乎总是你真正想要的。请注意,即使eval 的官方文档也说您应该改用ast.literal_eval

【讨论】:

  • ast.literal_evaleval稍微复杂,怎么会这样?
  • @vishes_shell:您需要添加一个导入(尽管来自标准库)。我并没有说它要复杂得多......它在评估字符串时也可能稍微慢一些,因为它首先执行一些检查。
【解决方案2】:

这个怎么样?

import re

m_s = "('A', 'Open')"
patt = r"\w+"
print(tuple(re.findall(patt, m_s)))

【讨论】:

    【解决方案3】:

    使用正则表达式怎么样?

    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')
    

    【讨论】:

      【解决方案4】:

      最短的就是做

      eval("('A','Open')") #will return type as tuple
      

      eval() 将字符串作为 Python 表达式求值并执行

      【讨论】:

        猜你喜欢
        • 2018-11-11
        • 1970-01-01
        • 1970-01-01
        • 2014-09-21
        • 2015-09-25
        • 2019-07-28
        • 2013-11-07
        相关资源
        最近更新 更多