我有关于python的速度/效率相关问题:
我需要编写大量非常大的R dataframe-ish文件,大小约为0.5-2 GB。这基本上是一个大的制表符分隔表,其中每行可以包含浮点数,整数和字符串。
通常情况下,我只是将所有数据放在numpy数据帧中并使用np.savetxt来保存它,但由于存在不同的数据类型,因此无法将其放入一个数组中。
因此我只是简单地将线条组装成字符串,但这有点慢。到目前为止,我正在做:
1)将每一行组装成一个字符串 2)将所有行连接为单个巨大的字符串 3)将字符串写入文件
我有几个问题: 1)大量的字符串连接最终耗费大量时间 2)我运行RAM来保持内存中的字符串 3)......这反过来导致更多单独的file.write命令,这些命令也非常慢。
所以我的问题是:这类问题的常规是什么?一种平衡速度与内存消耗的方法,用于最有效的字符串连接和写入磁盘。
...或者这个策略可能只是坏事,我应该做一些完全不同的事情?
提前致谢!
答案 0 :(得分:6)
似乎Pandas可能是解决这个问题的好工具。开始使用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
答案 1 :(得分:5)
除非遇到性能问题,否则您可以逐行写入文件。 Python内部使用缓冲,可能会在性能和内存效率之间做出很好的折衷。
Python缓冲与操作系统缓冲不同,您可以通过将buffering
参数设置为open
来指定缓冲内容的方式。
答案 2 :(得分:0)
我认为您可能想要做的是创建一个内存映射文件。请查看以下文档,了解如何使用numpy执行此操作:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.memmap.html