PHP按行读取、处理较大CSV文件的代码实例


Posted in PHP onApril 09, 2014

对于数百万条数据量的CSV文件,文件大小可能达到数百M,如果简单读取的话很可能出现超时或者卡死的现象。

为了成功将CSV文件里的数据导入数据库,分批处理是非常必要的。

下面这个函数是读取CSV文件中指定的某几行数据:

/**
 * csv_get_lines 读取CSV文件中的某几行数据
 * @param $csvfile csv文件路径
 * @param $lines 读取行数
 * @param $offset 起始行数
 * @return array
 * */
function csv_get_lines($csvfile, $lines, $offset = 0) {
    if(!$fp = fopen($csvfile, 'r')) {
     return false;
    }
    $i = $j = 0;
 while (false !== ($line = fgets($fp))) {
  if($i++ < $offset) {
   continue; 
  }
  break;
 }
 $data = array();
 while(($j++ < $lines) && !feof($fp)) {
  $data[] = fgetcsv($fp);
 }
 fclose($fp);
    return $data;
}

调用方法:
$data = csv_get_lines('path/bigfile.csv', 10, 2000000);
print_r($data);

函数主要采用行定位的思路,通过跳过起始行数来实现文件指针定位。

上述函数对500M以内的文件进行过测试,运行通畅,对于更大的文件未做测试,请斟酌使用或加以改进。

PHP 相关文章推荐
967 个函式
Oct 09 PHP
PHP 工厂模式使用方法
May 18 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
PHP中的生成XML文件的4种方法分享
Oct 06 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
Jun 18 PHP
PHP中的替代语法简介
Aug 22 PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 PHP
PHP的APC模块实现上传进度条
Oct 27 PHP
使用php+swoole对client数据实时更新(一)
Jan 07 PHP
浅谈PHP中的数据传输CURL
Sep 06 PHP
centos 7.2下搭建LNMP环境教程
Nov 20 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
Jul 10 PHP
PHP二维数组排序的3种方法和自定义函数分享
Apr 09 #PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
Apr 09 #PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 #PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 #PHP
PHP读取大文件的类SplFileObject使用介绍
Apr 09 #PHP
php解决约瑟夫环示例
Apr 09 #PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 #PHP
You might like
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
php快速查找数据库中恶意代码的方法
2015/04/01 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
js导出excel文件的简洁方法(推荐)
2016/11/02 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
Vue路由跳转问题记录详解
2017/06/15 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
使用python绘制3维正态分布图的方法
2018/12/29 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
六年级数学教学反思
2014/02/03 职场文书
医院院务公开实施方案
2014/05/03 职场文书
产品发布会策划方案
2014/05/12 职场文书
疾病防治方案
2014/05/31 职场文书
安全目标责任书
2014/07/22 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
夏洛特的网观后感
2015/06/15 职场文书
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python
如何利用python实现Simhash算法
2022/06/28 Python
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL