2017-06-21 230 views
2

'packages_list'的HTTP响应头返回以下内容,它是一个查找字符串的列表。我如何将其转换为实际列表?我试图将字符串转换为一个不起作用的列表。我不热衷于找到并更换或剥离。一旦我有了列表,我正在创建一个带有按钮的windows窗体,其中包含列表中每个项目的文本。任何帮助表示赞赏将字符串查找列表转换为Python中的列表

我使用IronPython的2.6(是的,我知道它的旧的,但不能搬走了向后兼容的原因)

['Admin', 'MMX_G10_Asia', 'MMX_G10_London', 'MMX_G10_Readonly', 'MMX_Credit_Readonly', 'MMX_Govies_ReadOnly'] 


httpConn = httplib.HTTPConnection(base_server_url) 
httpConn.request("POST", urlparser.path, params) 
response = httpConn.getresponse() 
headers = dict(response.getheaders()) 
print headers['packages_list'] 
+0

谢谢大家的帮助。令我失望的是,IronPython 2.6显然有一个bug,并且json.loads爆炸了,它没有构建ast包。并且因为向后兼容性原因而无法安装 文件“C:\ Program Files(x86)\ MMI_RADIA_PKG \ IronPython 2.6 \ Lib \ json \ __ init__.py”,行307,正在加载 文件“C:\ Program Files )\ MMI_RADIA_PKG \ IronPython 2.6 \ Lib \ json \ scanner.py“,第42行,在iterscan中 AttributeError:'NoneType'对象没有属性'scanner' IronPython bug reference http://ironpython.codeplex.com/workitem/25787 – ginksman

回答

5

最简单的方法,恕我直言,是使用literal_eval

>>> s = "['Admin', 'MMX_G10_Asia', 'MMX_G10_London', 'MMX_G10_Readonly', 'MMX_Credit_Readonly', 'MMX_Govies_ReadOnly']" 
>>> s 
"['Admin', 'MMX_G10_Asia', 'MMX_G10_London', 'MMX_G10_Readonly', 'MMX_Credit_Readonly', 'MMX_Govies_ReadOnly']" 
>>> from ast import literal_eval 
>>> literal_eval(s) 
['Admin', 'MMX_G10_Asia', 'MMX_G10_London', 'MMX_G10_Readonly', 'MMX_Credit_Readonly', 'MMX_Govies_ReadOnly'] 
+0

感谢穆里尼克抽出时间来帮忙。可悲的是,在IronPython 2.6中没有ast – ginksman

1

你可以检查,如果字符串是一个有效的Python类型

>>> import ast 
>>> s = "['Admin', 'MMX_G10_Asia', 'MMX_G10_London', 'MMX_G10_Readonly', 'MMX_Credit_Readonly', 'MMX_Govies_ReadOnly']" 
>>> ast.literal_eval(s) 
['Admin', 'MMX_G10_Asia', 'MMX_G10_London', 'MMX_G10_Readonly', 'MMX_Credit_Readonly', 'MMX_Govies_ReadOnly'] 
+0

感谢Fred的回答。不幸的是,愚蠢的IronPython 2.6没有ast包:-( – ginksman

+0

[这真是令人惊讶!](https://ironpython-test.readthedocs.io/en/latest/library/ast.html#ast-helpers) – Fred

+0

Looks就像我使用的是最早的2.6系列 ' “C:\ Program Files(x86)\ MMI_RADIA_PKG \ IronPython 2.6 \ ipy.exe”C:/Users//PycharmProjects/MultiPackageSupport/temp/temp1.py Traceback最近调用最后一个): 文件“C:/Users//PycharmProjects/MultiPackageSupport/temp/temp1.py”,第1行,在C:/Users//PycharmProjects/MultiPackageSupport/temp/temp1.py ImportError:No module named ast 处理完成退出代码1 ' – ginksman

1

另一种选择是该字符串JSON格式转换,然后在阅读:

import json 
s = headers['packages_list'].replace("'", '"') 
result = json.loads(s) 
+0

你真的需要用'''替换所有''''吗?JSON不是使用任何一个来包含字符串文字吗? –

+0

@ Code-Apprentice不确定JSON规范说的是什么,但只有'json.load'接受'“'作为字符串分隔符。 –

+0

https://docs.python.org/2/library/json.html和https://docs.python.org/3/library/json.html中的示例另有说明:>>> >>> json.loads( '[“foo”,{“bar”:[“baz”,null,1.0,2]}]')'。 –

0

丑,但我用下面去。再次感谢大家的帮助!

headers = dict(response.getheaders()) 
print headers['packages_list'] 
result = headers['packages_list'].replace("'",'') 
result = result.replace("[","") 
result = result.replace("]", "") 
print result 
package_list = result.split(",") 
print "the 2nd item in teh list is ", package_list[1] 
相关问题