2013-05-18 59 views
5

說我有一個字符串,其中包含數據庫或電子表格中逗號分隔格式的數據。從Python中的逗號分隔字符串中只提取某些字段的最快方法

例如:

data = "hello,how,are,you,232.3354,good morning" 

假設有可能在這些 「記錄」 200場。

我有興趣查看此記錄的某些字段。 Python中最快的方法是什麼?

最簡單的方法是這樣的:

fields = data.split(",") 
result = [fields[4], fields[12], fields[123]] 

有一個更快的方法來做到這一點,利用的事實是:

  1. 你只需要分配一個列表3個元素和3個字符串對象的結果。
  2. 您可以停止掃描數據串,一旦你達到場123

我試圖用重複調用找到跳過通過逗號來寫一些代碼,但如果最後一個字段是太遠了這串變得比基本的拆分解決方案慢。

我正在處理數百萬條記錄,所以任何加速都會受到歡迎。

+2

用Python解決方案擊敗本地'str.split()'將會很困難。 –

+1

我不知道它是否更快,但你可以避免用'data.split(「,」,124)'分割整個字符串。 – chepner

+0

你確定它是你的應用程序的瓶頸嗎?你需要多快才能將應用程序中其他位置的瓶頸轉移? – jfs

回答

0

如果result可以是tuple,而不是一個列表,你可以使用operator.itemgetter贏得有點加速的(如果你做多次調用):

from operator import itemgetter 
indexer = itemgetter(4,12,123) 
result = indexer(data.split(',')) 

你需要timeit實際看看你是否加快了速度。

1

將所有內容加載到內存中,然後刪除所需的部分,你不會做得太多。我的建議是壓縮和更好的庫。

碰巧我有一對合適大小的csv躺在(這是500k線)。

> import gzip 
> import pandas as pd 
> %timeit pd.read_csv(gzip.open('file.csv.gz')) 
1 loops, best of 3: 545 ms per loop 

刪除列也很快,我不知道主要成本是多少。

> %timeit csv[['col1', 'col2']] 
100 loops, best of 3: 5.5 ms per loop 
相關問題