繁体   English   中英

Python:快速有效地编写大文本文件的方法

[英]Python: Fast and efficient way of writing large text file

我有关于python的速度/效率相关问题:

我需要编写大量非常大的R dataframe-ish文件,大小约为0.5-2 GB。 这基本上是一个大的制表符分隔表,其中每一行可以包含浮点数,整数和字符串。

通常,我只是将我的所有数据都放在numpy数据帧中并使用np.savetxt来保存它,但由于存在不同的数据类型,因此它无法真正放入一个数组中。

因此我只是简单地将线条组装成字符串,但这有点慢。 到目前为止,我正在做:

1)将每一行组合为一个字符串2)将所有行连接为单个巨大的字符串3)将字符串写入文件

我有几个问题:1)大量的字符串连接最终耗费大量时间2)我运行RAM来保持内存中的字符串3)...这反过来导致更多单独的file.write命令,也非常慢。

所以我的问题是:这类问题的常规是什么? 一种平衡速度与内存消耗的方法,可实现最高效的字符串连接和写入磁盘。

......或者这个策略可能只是坏事,我应该做一些完全不同的事情?

提前致谢!

看起来像熊猫可能是解决这个问题的好工具。 开始使用pandas非常容易,它可以很好地处理将数据导入python所需的大多数方法。 Pandas处理混合数据(浮点数,整数,字符串),通常可以自己检测类型。

一旦你在pandas中有一个(类似R的)数据帧,将帧输出到csv非常简单。

DataFrame.to_csv(path_or_buf, sep='\t')

您可以执行许多其他配置操作,以使您的制表符分隔文件恰到好处。

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html

除非遇到性能问题,否则您可以逐行写入文件。 Python内部使用缓冲,可能会在性能和内存效率之间做出很好的折衷。

Python缓冲与OS缓冲不同,您可以通过将buffering参数设置为open来指定缓冲的方式。

我想你可能想要做的是创建一个内存映射文件。 请查看以下文档,了解如何使用numpy执行此操作:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.memmap.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM