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

2016-03-16 11:45:24 +08:00
 karlxu
有个字符串:
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')
有什么快捷的方法吗?谢谢了!
3250 次点击
所在节点    问与答
8 条回复
wizardforcel
2016-03-16 12:32:29 +08:00
这种情况真得 eval 了。。。
karlxu
2016-03-16 13:04:34 +08:00
@wizardforcel 你好,我试了你说的 eval ,提示 TypeError: 'tuple' object is not callable,好像也不行。我是直接 b = eval(s),然后 print b
hahastudio
2016-03-16 13:09:06 +08:00
[eval(p+')', {}) for p in s.split(')') if p]
imn1
2016-03-16 13:32:29 +08:00
用正则转 json , parse ,然后……
或者
拆字符串为列表,然后……
ToughGuy
2016-03-16 14:07:29 +08:00
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
2016-03-16 14:16:37 +08:00
>>> 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
2016-03-16 14:21:05 +08:00
谢谢大家!感谢已发送~~~~
weyou
2016-03-16 14:29:20 +08:00
最简单的:
s = eval(s.replace(')(', '),('))

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/263877

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX