从文本文件中恢复保存为字符串的列表,重新转换为列表

1 投票
1 回答
501 浏览
提问于 2025-04-18 18:52

新手问题,研究了四个小时。

我写了一个程序,可以把公式以字符串的形式保存在一个文本文件里:

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

但是,当我从文本文件中读取这些公式时,我发现很难把它们恢复成原来的样子。

我试着用逗号来分割这个字符串,比如用 alg.string(','),结果却搞得一团糟:

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

我该怎么把第三行的字符串转换成一个字符串列表呢?特别是,怎么去掉那些双引号?

(这些双引号是为了后面用到一个逆波兰表达式的计算函数。)

1 个回答

3

如果你有一个字符串,可以使用 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']

这是 pickle 的用法:

>>> 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']

最后,如果你的数据就只有这些,你可以使用 Python 的 csv 模块 来保存和读取数据,格式是 csv:

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']

撰写回答