我有一个问题。这可能很简单,但无论如何我找不到好主意。问题是我有2个python程序。其中第一个是输出2,输出之一是巨大的列表(比如有数千个其他列表),另一个是Weka的简单csv文件。我需要以某种方式存储此列表(第一个输出),以便以后能够将其用作其他程序的输入。我不能把它发送到第二个程序,因为当第一个程序完成时,Weka也应该为第二个程序产生新的输出。因此,第二个程序必须等待第一个程序和Weka的输出。
问题是输出列表包含丢失具有数值的列表。简单的例子可能是:
list1 = [[1,5,7],[14,3,27], [19,12,0], [23,8,17], [12,7]]
如果我在txt文件上写这个,那么当我尝试读取它时,它会将所有值都作为字符串。是否有任何简单快捷的方法(因为数据很大)管理以某种方式将所有值作为整数?或者在第一种情况下,将其写为整数?
答案 0 :(得分:1)
如何挑选列表输出而不是将其输出为纯文本表示?看看你的版本the documentation:它基本上是一种将Python对象写入文件的方法,然后你可以随时从Python中读取它来获得相同的对象。
一旦打开了要输出的文件,输出差异就会很小,例如。
import pickle
my_list = [[1, 2], [134, 76], [798, 5, 2]]
with open('outputfile.pkl', 'wb') as output:
pickle.dump(my_list, output, -1)
然后只需使用以下方法从第二个程序中读取它:
import pickle
my_list = pickle.load(open('outputfile.pkl', 'rb'))
答案 1 :(得分:1)
我认为使用pickle module
是个好例子保存数据:
import pickle
lst = [[1,5,7],[14,3,27], [19,12,0], [23,8,17], [12,7]]
pickle.dump(lst, open('data.pkl', 'wb'))
从已保存的文件中读取数据:
import pickle
lst = pickle.load(open('data.pkl', 'r')
来自文档:
pickle模块实现了一个基本但强大的算法 序列化和反序列化Python对象结构。 “酸洗” 是将Python对象层次结构转换为a的过程 字节流和“unpickling”是反向操作,由此是一个字节 流被转换回对象层次结构。酸洗(和 unpickling)也称为“序列化”,“编组”, [1]或“扁平化”,但为了避免混淆,这里使用的术语 是“酸洗”和“捣蛋”。
还有更快的cPickle module:
保存数据:
from cPickle import Pickler
p = Pickler(open('data2.pkl', 'wb'))
p.dump(lst)
从已保存的文件中读取数据:
from cPickle import Unpickler
up = Unpickler(open('data.pkl', 'r'))
lst = up.load()