【问题标题】:Recovering list saved in textfile as string, turning it back into list恢复以字符串形式保存在文本文件中的列表,将其转回列表
【发布时间】:2014-10-22 14:41:15
【问题描述】:

四个小时研究后的新手问题。

我编写了一个程序,将公式以字符串格式保存在文本文件中:

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

但是,当我从文本文件中读取这些公式时,我无法恢复它们的原始形式。

当我在 ',' 上拆分 alg 字符串时 - 就像在 alg.string(',') 中一样 - 我搞砸了:

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

如何将第 3 行中的字符串转换为字符串列表?特别是,我如何摆脱双引号?

(它们供逆波兰 eval 函数稍后使用。)

【问题讨论】:

  • 这是什么语言?
  • 语言为 Python 2.X。
  • Pickle 或 ast.literal_eval

标签: python string list text-parsing


【解决方案1】:

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

最后,如果这是您的全部数据,您可以使用 Python csv module 保存和恢复为 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']

【讨论】:

  • +1 用于建议 JSON 或 Pickle。这确实是正确的做法。
猜你喜欢
  • 1970-01-01
  • 2018-11-05
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多