Python:需要解析帮助!

5
我正在尝试检索.lua文件中的某些字段。最初我以为只需在逗号上分割即可,但第二组花括号破坏了这一点。以下是一个例子:
返回{     {6163,0,“tv”,false,{1302},“ESPN Deportes”,“ESPN Deportes es el”,nil,“tv”,“936”,nil,“4x3”,mediaRestrictions = {“m2g”} },     {57075,0,“tv”,false,{1302},“Video Rola”,“Video \” Música Para Tus Ojos\”,uedes ver。”,nil,“tv”,“948”,nil,“4x3”,mediaRestrictions = {“m2g”} },     {717242,0,“tv”,false,{1302,1301,1288},“Hits”,“asdlfj”,nil,“cliplinear”,“6310”,nil,“4x3”,mediaRestrictions = {“m2g”} },     {122719,0,“tv”,false,{1302,1301,1288},“Bombone”,“asdf”,nil,“tv”,“74”,nil,“4x3”,mediaRestrictions = {“m2g”} }, }
因此,我将从第一行中寻找以下内容: “ESPN Deportes”(第6个字段),tv(第9个),936(第10个)
请求stackoverflow ninja帮助解决。 (Python)
更新后的解决方案由S.Mark慷慨提供:
res = conn.getresponse()
data = res.read()

# Hackisly transform the lua into json
data = re.sub('\w+=', '', data)
data = data.replace("return","")
data = data.replace("{","[").replace("}","]")
data = data.replace("nil","null")
data = data.replace(",]","]")
data = json.loads(data.strip())

1
http://niemeyer.net/lunatic-python - Ignacio Vazquez-Abrams
3个回答

3
可能需要转换成JSON格式。
import json

text = r"""return { 
{ 6163, 0, "tv", false, {1302}, "ESPN Deportes", "ESPN Deportes es el", nil,"tv","936",nil,"4x3", mediaRestrictions={"m2g" } },
{ 57075, 0, "tv", false, {1302}, "Video Rola", "Video \"Música Para Tus Ojos\", uedes ver.", nil,"tv","948",nil,"4x3", mediaRestrictions={"m2g" } },
{ 717242, 0, "tv", false, {1302,1301,1288}, "Hits", "asdlfj", nil,"cliplinear","6310",nil,"4x3", mediaRestrictions={"m2g" } },
{ 122719, 0, "tv", false, {1302,1301,1288}, "Bombone", "asdf", nil,"tv","74",nil,"4x3", mediaRestrictions={"m2g" } },
}"""

obj = json.loads(text.replace("return","").replace("mediaRestrictions=","").replace("{","[").replace("}","]").replace("nil","null").replace("\n","").replace(",]","]").strip())

print obj

# [[6163, 0, u'tv', False, [1302], u'ESPN Deportes', u'ESPN Deportes es el', None, u'tv', u'936', None, u'4x3', [u'm2g']], [57075, 0, u'tv', False, [1302], u'Video Rola', u'Video "M\xfasica Para Tus Ojos", uedes ver.', None, u'tv', u'948', None, u'4x3', [u'm2g']], [717242, 0, u'tv', False, [1302, 1301, 1288], u'Hits', u'asdlfj', None, u'cliplinear', u'6310', None, u'4x3', [u'm2g']], [122719, 0, u'tv', False, [1302, 1301, 1288], u'Bombone', u'asdf', None, u'tv', u'74', None, u'4x3', [u'm2g']]]

for x in obj:
  print x[5], x[8], x[9]

#ESPN Deportes tv 936
#Video Rola tv 948
#Hits cliplinear 6310
#Bombone tv 74

1
你是一个能够快速解决问题的人,我可以看出来。谢谢,伙计,干得好! - CarpeNoctem

1

我在Lua方面没有经验,但我猜你是将其作为字符串/文件接收。

不是最好的解决方案:

import json
myvalue = "{ 1,2,3, { 4,5,6}, {7} }"
myvalue = myvalue.replace("{", "[").replace("}", "]")
mylist = json.loads(myvalue)

然后将其视为列表处理?

或者,如果它是一个文件,请使用json.load而不是json.loads


1
你可以尝试这个技巧:
  1. 从字符串中删除 'return'
  2. [] 替换 {}
  3. 运行 eval(或者使用更安全的 ast.literal_eval)来获取一个列表的列表
  4. 获取你想要的元素

literal_eval 是个天才。在 Python 2.7+ 中,你甚至可以跳过第二步,因为添加了集合字面量。但无论如何,这并不起作用,因为 mediaRestrictions={"m2g"} 不是一个有效的集合或列表项。 - Lauritz V. Thaulow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接