我從配置文件中獲取各種數據類型並將它們添加到字典中。但我在列表中遇到問題。我想採用文本:alist = [1,2,3,4,5,6,7]
並轉換爲整數列表。但我越來越如何將文本格式列表轉換爲python列表
['1', ',', '2', ',', '3', ',', '4', ',', '5', ',', '6', ',', '7'].
我該如何解決這個問題?
這裏是config.txt的:
firstname="Joe"
lastname="Bloggs"
employeeId=715
type="ios"
push-token="12345"
time-stamp="Mon, 22 Jul 2013 18:45:58 GMT"
api-version="1"
phone="1010"
level=7
mylist=[1,2,3,4,5,6,7]
這是我的代碼來解析:
mapper = {}
def massage_type(s):
if s.startswith('"'):
return s[1:-1]
elif s.startswith('['):
return list(s[1:-1]) #in this case get 'mylist': ['1', ',', '2', ',', '3', ',', '4', ',', '5', ',', '6', ',', '7']
elif s.startswith('{'):
return "object" #todo
else:
return int(s)
doc = open('config.txt')
for line in doc:
line = line.strip()
tokens = line.split('=')
if len(tokens) == 2:
formatted = massage_type(tokens[1])
mapper[tokens[0]] = formatted
#check integer list
mapper["properlist"] = [1,2,3,4,5,6,7] #this one works
print mapper
這是我的打印輸出:
{'time-stamp': 'Mon, 22 Jul 2013 18:45:58 GMT', 'mylist': ['1', ',', '2', ',', '3', ',', '4', ',', '5', ',', '6', ',', '7'], 'employeeId': 715, 'firstname': 'Joe', 'level': 7, 'properlist': [1, 2, 3, 4, 5, 6, 7], 'lastname': 'Bloggs', 'phone': '1010', 'push-token': '12345', 'api-version': '1', 'type': 'ios'}
更新。
感謝您的反饋意見。我意識到,我也能拿異構列表,從而改變列表部分:
elif s.startswith('['):
#check element type
elements = s[1:-1].split(',')
tmplist = [] #assemble temp list
for elem in elements:
if elem.startswith('"'):
tmplist.append(elem[1:-1])
else:
tmplist.append(int(elem))
return tmplist
它只能處理字符串和整數,但夠用了什麼,我現在需要的。
你有沒有考慮過使用ConfigParser? http://docs.python.org/2/library/configparser.html和Python3:http://docs.python.org/3.2/library/configparser.html 它當然使解析配置文件非常容易。 – erewok
'ast.literal_eval'可能是你想要的,取決於你想要什麼。 :-) – torek
@erewok:我也用過很多「configobj」:看到http://www.decalage.info/en/python/configparser – torek