存储列表,然后将其读作整数

时间:2013-09-25 08:28:38

标签: python file-io integer

我有一个问题。这可能很简单,但无论如何我找不到好主意。问题是我有2个python程序。其中第一个是输出2,输出之一是巨大的列表(比如有数千个其他列表),另一个是Weka的简单csv文件。我需要以某种方式存储此列表(第一个输出),以便以后能够将其用作其他程序的输入。我不能把它发送到第二个程序,因为当第一个程序完成时,Weka也应该为第二个程序产生新的输出。因此,第二个程序必须等待第一个程序和Weka的输出。 flow graph

问题是输出列表包含丢失具有数值的列表。简单的例子可能是:

list1 = [[1,5,7],[14,3,27], [19,12,0], [23,8,17], [12,7]] 

如果我在txt文件上写这个,那么当我尝试读取它时,它会将所有值都作为字符串。是否有任何简单快捷的方法(因为数据很大)管理以某种方式将所有值作为整数?或者在第一种情况下,将其写为整数?

2 个答案:

答案 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()