簡體   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