python中csv库函数_读写csv文件的最佳方式:pandas函数vs csv库?

你的两个程序做的是完全不同的事情。pd.read_csv()将整个文件拖入内存,而{}只在需要时读取。一个更等效的比较是pd.read_csv(chunksize=chunksize)。在

pandas版本的问题是,它不能保证在不再需要文件句柄时立即清理它。Python保证在文件句柄被垃圾回收时关闭一个文件句柄,但它不保证在垃圾回收发生时。如果您打开数千个文件,您可能会发现自己意外地用完了文件句柄,即使您一次的句柄从来没有超过几个。在

在CPython中,它使用引用计数,这意味着垃圾回收是即时的,这可能不是什么大问题,因为一旦不再引用file对象,CPython就会关闭文件句柄。但是大多数其他Python实现使用垃圾收集策略,这些策略可能会延迟垃圾收集,直到清理线程出现。如果您确信您的应用程序只能在CPython中运行,并且您只编写不打开太多文件的短期程序,那么您就可以reader = csv.reader(open(filename))。在

但是在可能出现上述问题的情况下,pandas版本在使用分块读取(处理非常大的文件时需要)时也不安全。在这种情况下,为了安全起见,您还应该使用上下文管理器:for filename in lots_of_files:

with open(filename) as f:

for chunk in pd.read_csv(f, chunksize=chunksize):

process(chunk)

总之,在您需要在可能出现问题的情况下工作之前,使用with语句关闭文件句柄主要是迂腐的。总是关闭文件句柄是一个很好的做法,但是如果您知道您的程序不会打开超过几个文件,或者如果您知道您只需要在CPython上运行,那么如果它不会给您带来问题,那么通常不需要太担心它。在

你可能感兴趣的:(python中csv库函数)