gpt4 book ai didi

python - 访问非常大的 csv 文件有哪些不同的方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:03 25 4
gpt4 key购买 nike

我一直致力于一个项目,我必须尽快读取和处理包含数百万行的非常大的 csv 文件。

我找到了链接:https://nelsonslog.wordpress.com/2015/02/26/python-csv-benchmarks/作者对访问 csv 的不同方式和每一步所花费的时间进行了基准测试。他使用了 catdevnull 进程,代码如下所示:

def catDevNull():
os.system('cat %s > /dev/null' % fn)

这种情况下花费的时间最少。我相信它独立于 python 版本,因为读取文件所花费的时间保持不变。然后他利用warmc ache方法如图:

def wc():
os.system('wc -l %s > /dev/null' % fn)

以上两种方式是最快的。使用pandas.read_csv做任务,时间比其他方法少,但还是比上面两种方法慢。

输入x = os.system('cat %s >/dev/null % fn),检查数据类型是字符串。

os.system 是如何读取时间少了这么多的文件的?另外,在 os.system 读取文件以进行进一步处理后,有没有办法访问这些文件?

我也很好奇,与上面链接中所示的其他可用方法相比,pandas 读取文件的速度为何如此之快?

最佳答案

os.system 完全放弃了您在 Python 中拥有的控制权。无法访问子流程完成后发生的任何事情。

对子进程进行一些(但不充分)控制的更好方法是使用 Python subprocess 模块。这允许您使用信号和 I/O 与正在运行的进程进行交互,但是仍然无法影响进程的内部结构,除非它具有允许您这样做的特定 API。 (如果您想探索,Linux 在 /proc 文件系统中公开了一些进程内部。)

我认为您不了解基准测试的含义。 cat >/dev/null 是一个基线,它简单地测量系统能够以多快的速度从磁盘读取文件;你的进程不可能比 I/O channel 允许的更快,所以这是系统什么都不做所花费的时间。在比较它们的相对性能之前,您基本上会从后续结果中减去这个时间。

通常,读取大文件绝对最快的方法是对其建立索引,然后使用内存中的索引来查找您要访问的文件内的位置。建立索引会产生一些开销,但如果您多次访问该文件,好处很快就会抵消开销。将文件导入数据库是一种方便友好的方式;数据库完全封装了 I/O,并允许您查询数据,就好像您可以忽略它在后台以某种方式序列化为磁盘上的字节。

关于python - 访问非常大的 csv 文件有哪些不同的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54197804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com