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 相关文章推荐
教你IIS6的PHP最佳配置方法
Sep 05 PHP
PHP网上调查系统
Oct 09 PHP
PHP设计模式 注册表模式
Feb 05 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
Nov 11 PHP
浅谈json_encode用法
Mar 05 PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 PHP
PHP生成word文档的三种实现方式
Nov 14 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
Nov 25 PHP
[原创]php实现数组按拼音顺序排序的方法
May 03 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
Jun 07 PHP
PHP lcfirst()函数定义与用法
Mar 08 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
Oct 11 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和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
简单JS代码压缩器
2006/10/12 Javascript
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
2009/01/30 Javascript
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
详解前端自动化工具gulp自动添加版本号
2016/12/20 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
2019/12/22 Javascript
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
Python编程之Re模块下的函数介绍
2017/10/28 Python
python MySQLdb使用教程详解
2018/03/20 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
关于祖国的演讲稿
2014/05/04 职场文书
工地门卫岗位职责范本
2014/07/01 职场文书
汽车转让协议书
2015/01/29 职场文书
二手车转让协议书
2015/01/29 职场文书
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android