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

标签 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 后,您可以停止扫描数据字符串。

我尝试使用重复调用来编写一些代码来查找跳过传递的逗号,但是如果最后一个字段在字符串下方太远,这会比基本拆分解决方案慢。

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

最佳答案

除了将所有内容加载到内存中然后删除您需要的部分之外,您不会做得更好。我的建议是压缩和更好的库。

碰巧我有几个大小合理的 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

关于python - 在 Python 中从逗号分隔的字符串中仅提取某些字段的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16619882/

相关文章:

python - 为什么 binascii.a2b_hex() 返回一个字符串?

python - 使用 Substr 和负值对注释中的查询结果字符串字段进行切片

performance - OpenGL/DirectX : How does Mipmapping improve performance?

c - 为什么在二维数组上迭代时循环的顺序会影响性能?

python - 脚本中的 Sympy Solver 不打印返回

c# - TCP 套接字服务器偶尔会随着时间的推移建立 CLOSE_WAIT,直到无法操作

python - 创建 .csv 文件时出现 UnicodeEncodeError

python - NetworkX:在 for 循环中绘制图形返回错误的图形

SQL(Mariadb)将逗号分隔的字符串拆分为行

python - 在 nltk.tree.Tree 中查找路径