如何高效处理3000万字符的大型CSV文件?

DDD
发布: 2024-11-10 20:35:03
原创
502 人浏览过

How to Efficiently Process Large CSV Files with 30 Million Characters?

高效操作大型 CSV 文件:处理 3000 万个字符的字符串

操作大型 CSV 时遇到“内存不足”错误通过 Curl 下载的文件。该文件包含大约 3050 万个字符,尝试使用“r”和“n”将其拆分为行数组会由于内存消耗过多而失败。为了避免分配错误,请考虑替代方法:

流式传输数据而不写入文件:

利用 CURLOPT_FILE 选项将数据直接流式传输到自定义流包装器中,而不是写入一个文件。通过定义自己的流包装器类,您可以在数据块到达时对其进行处理,而无需分配过多的内存。

示例流包装器类:

class MyStream {
    protected $buffer;

    function stream_open($path, $mode, $options, &$opened_path) {
        return true;
    }

    public function stream_write($data) {
        // Extract and process lines
        $lines = explode("\n", $data);
        $this->buffer = $lines[count($lines) - 1];
        unset($lines[count($lines) - 1]);

        // Perform operations on the lines
        var_dump($lines);
        echo '<hr />';

        return strlen($data);
    }
}
登录后复制

注册流包装器:​​

stream_wrapper_register("test", "MyStream") or die("Failed to register protocol");
登录后复制

使用流配置 Curl包装器:

$fp = fopen("test://MyTestVariableInMemory", "r+"); // Pseudo-file written to by curl

curl_setopt($ch, CURLOPT_FILE, $fp); // Directs output to the stream
登录后复制

这种方法允许您增量地处理数据块,避免内存分配并使其可以对大字符串进行操作。

其他注意事项:

  • 彻底测试实现以确保它可以处理长线和其他边缘
  • 可能需要额外的代码来执行数据库插入。
  • 此解决方案作为起点;可能需要定制和优化。

以上是如何高效处理3000万字符的大型CSV文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板