2017-06-21 226 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] 
相關問題