为什么我不能 pickle unicodecsv.reader 的实例?

Why can't I pickle an instance of unicodecsv.reader?

我需要 cPickle.dump 一个存储 unicodecsv.reader class 实例的对象。当我尝试这样做时,进程以异常终止:

PicklingError: Can't pickle <type '_csv.reader'>: it's not the same object as _csv.reader

我发现当您对同一对象进行多次不同的导入时,这可能会成为问题,但我的情况并非如此。

你能给我一些提示吗?谢谢!

你的问题是 csv.reader 个对象不能被 pickle 所以 unicodecsv.reader 个对象也不能被 pickle。 pickle csv.reader 对象通常没有意义,因为它们通常与文件一起使用,而文件也不能被 pickle。

您的问题没有简单的解决方案。您可以定义自己的 custom pickling methods 告诉 pickler 如何在不 pickle csv.reader 对象的情况下 pickle 对象,或者您可以重写对象的实现,这样它就不需要存储一个实例unicodecsv.reader

我的解决方案是 pickling list(unicodecsv.reader)。