在Python中仅从逗号分隔字符串中提取某些字段的最快方法

时间:2013-05-18 01:31:16

标签: python performance csv split

假设我有一个字符串,其中包含来自数据库或电子表格的数据,采用逗号分隔格式。

例如:

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后,您可以停止扫描数据字符串。
  3. 我尝试使用重复调用来编写一些代码来查找跳过传递的逗号,但如果最后一个字段在字符串中太远,则会比基本的分割解决方案慢。

    我正在处理数百万条记录,因此欢迎加速。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果result可以是tuple而不是列表,那么使用operator.itemgetter可能会获得一些加速(如果您正在进行多次调用):

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

你需要timeit才能真正看到你是否获得加速。