V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
karlxu
V2EX  ›  问与答

python 字符串如何转元祖?试了 tuple()不是我想要的格式。。。

  •  
  •   karlxu · 2016-03-16 11:45:24 +08:00 · 3310 次点击
    这是一个创建于 3175 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有个字符串:
    s='(u'22222', u'b.b.com', u'test3', u'127.0.0.1,c.c.com')(u'33333', u'c.c.com', u'test1', u'127.0.0.1,c.c.com')(u'f1', u'a.a.com', u'test2', u'127.0.0.1,a.a.com')'

    试了用 tuple(s)来转,结果如下:



    我想要的是这种:是 s[0]=(u'22222', u'b.b.com', u'test3', u'127.0.0.1,c.c.com')
    有什么快捷的方法吗?谢谢了!
    8 条回复    2016-03-16 14:29:20 +08:00
    wizardforcel
        1
    wizardforcel  
       2016-03-16 12:32:29 +08:00 via Android
    这种情况真得 eval 了。。。
    karlxu
        2
    karlxu  
    OP
       2016-03-16 13:04:34 +08:00
    @wizardforcel 你好,我试了你说的 eval ,提示 TypeError: 'tuple' object is not callable,好像也不行。我是直接 b = eval(s),然后 print b
    hahastudio
        3
    hahastudio  
       2016-03-16 13:09:06 +08:00   ❤️ 1
    [eval(p+')', {}) for p in s.split(')') if p]
    imn1
        4
    imn1  
       2016-03-16 13:32:29 +08:00   ❤️ 1
    用正则转 json , parse ,然后……
    或者
    拆字符串为列表,然后……
    ToughGuy
        5
    ToughGuy  
       2016-03-16 14:07:29 +08:00   ❤️ 1
    from ast import literal_eval

    s = literal_eval("(u'22222', u'b.b.com', u'test3', u'127.0.0.1,c.c.com'),(u'33333', u'c.c.com', u'test1', u'127.0.0.1,c.c.com'),(u'f1', u'a.a.com', u'test2', u'127.0.0.1,a.a.com')")
    weyou
        6
    weyou  
       2016-03-16 14:16:37 +08:00   ❤️ 1
    >>> s="(u'22222', u'b.b.com', u'test3', u'127.0.0.1,c.c.com')(u'33333', u'c.c.com', u'test1', u'127.0.0.1,c.c.com')(u'f1', u'a.a.com', u'test2', u'127.0.0.1,a.a.com')"
    >>> s = [eval('({})'.format(item)) for item in s.strip('()').split(')(')]
    >>> s
    [('22222', 'b.b.com', 'test3', '127.0.0.1,c.c.com'), ('33333', 'c.c.com', 'test1', '127.0.0.1,c.c.com'), ('f1', 'a.a.com', 'test2', '127.0.0.1,a.a.com')]
    karlxu
        7
    karlxu  
    OP
       2016-03-16 14:21:05 +08:00
    谢谢大家!感谢已发送~~~~
    weyou
        8
    weyou  
       2016-03-16 14:29:20 +08:00   ❤️ 1
    最简单的:
    s = eval(s.replace(')(', '),('))
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1116 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:35 · PVG 07:35 · LAX 15:35 · JFK 18:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.