2014-08-28 69 views
0

經過四個小時的研究後出現新手問題。將文本文件中保存的字符串恢復爲字符串,將其重新放回列表中

我寫了一個程序,在字符串格式保存公式一個文本:

['myminus', 'IBM', 'Low', 'myplus', 'IBM', 'Close', 'WMT', 'Low'] 

當我從文本文件閱讀這些公式,但是,我無法在原來的形式恢復它們。

當我在「,」分裂ALG字符串 - 在alg.string(',') - 我得到一個爛攤子:

["['myminus'", " 'IBM'", " 'Low'", " 'myplus'", " 'IBM'", " 'Close'", " 'WMT'", " 'Low']"] 

如何把字符串中3線和轉換成字符串列表?特別是,我該如何擺脫雙引號?

(它們是由逆波蘭eval函數以後使用。)

+0

這是什麼語言? – mskfisher 2014-08-28 16:45:56

+0

語言是Python 2.X. – b0bm00re 2014-08-28 17:11:09

+0

Pickle或ast.literal_eval – dawg 2014-08-28 19:29:07

回答

2

如果你有一個字符串,你可以使用ast.literal_eval把它放回Python數據結構:

>>> s="['myminus', 'IBM', 'Low', 'myplus', 'IBM', 'Close', 'WMT', 'Low']" 
>>> import ast 
>>> ast.literal_eval(s) 
['myminus', 'IBM', 'Low', 'myplus', 'IBM', 'Close', 'WMT', 'Low'] 

你可以還可以使用類似jsonpickle的東西來將Python數據序列化到文件或從文件中進行序列化。

這裏是JSON:

>>> li=['myminus', 'IBM', 'Low', 'myplus', 'IBM', 'Close', 'WMT', 'Low'] 
>>> 
>>> import json 
>>> json.dumps(li) 
'["myminus", "IBM", "Low", "myplus", "IBM", "Close", "WMT", "Low"]' 
>>> s=json.dumps(li) 
>>> li2=json.loads(s) 
>>> li2 
[u'myminus', u'IBM', u'Low', u'myplus', u'IBM', u'Close', u'WMT', u'Low'] 

味酸:

>>> import pickle 
>>> s=pickle.dumps(li) 
>>> s 
"(lp0\nS'myminus'\np1\naS'IBM'\np2\naS'Low'\np3\naS'myplus'\np4\nag2\naS'Close'\np5\naS'WMT'\np6\nag3\na." 
>>> pickle.loads(s) 
['myminus', 'IBM', 'Low', 'myplus', 'IBM', 'Close', 'WMT', 'Low'] 

最後,如果這是你的數據的全部,你可以只保存和使用爲csv恢復了Python csv module

import csv 

li=['myminus', 'IBM', 'Low', 'myplus', 'IBM', 'Close', 'WMT', 'Low'] 

with open('/tmp/calc.csv', 'w') as fout: 
    writer=csv.writer(fout) 
    writer.writerow(li) 

with open('/tmp/calc.csv', 'r') as fin: 
    reader=csv.reader(fin) 
    data=next(reader) 

>>> data 
['myminus', 'IBM', 'Low', 'myplus', 'IBM', 'Close', 'WMT', 'Low'] 
+0

用於提示JSON或Pickle的+1。這真的是在這裏做的正確方法。 – whereswalden 2014-08-28 20:13:57

相關問題