How to pickle several .txt files into one pickle

2019-08-06 04:56发布

问题:

I need to overcome some cPickle constrains, namely i need to open several files and pickle them to one file, like this:

import cPickle

file1=open('file1.txt','r')
file2=open('file2.txt','r')
obj=[file1,file2] or obj=[file1.read(), file2.read()]
cPickle.dump(obj,open('result.i2','w'),2)

so that later I can "repickle" them and get the data.

Is a cPickle good way to do so?If yes how can I do it properly

If not, what would be suitable?

Thanks in advance

Rafal

回答1:

This is the correct way, it pickles the file contents:

file1=open('file1.txt','r')
file2=open('file2.txt','r')
obj=[file1.read(), file2.read()]
cPickle.dump(obj,open('result.i2','w'),2)

If you set obj=[file1,file2] you are not pickling the file contents, you are pickling the file handles.



回答2:

Proper code to save multiple .txt files into one, and then unpack them into text files again, based on Dietrich Epp 's answer:

import cPickle,os


def save(dir):
    result_file=open(dir+'/result.i2','wb')        
    list=os.listdir(dir) 
    obj=[list]   
    for file in list:
        print file
        f=open(dir+"/"+file,'rb')        
        obj.append(f.read())

    cPickle.dump(obj,result_file,2)

def load(path):
    f=open(path+"/"+'result.i2','rb')


    obj=cPickle.load(f)    
    for i in range(1,len(obj)):
        file=open(path+"/"+obj[0][i-1],'wb')
        file.writelines(obj[i])
        file.close()


标签: python pickle