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 相关文章推荐
Content-type 的说明
Oct 09 PHP
2014过年倒计时示例
Jan 31 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 PHP
两个php日期控制类实例
Dec 09 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
如何使用PHP对网站验证码进行破解
Sep 17 PHP
php实现微信公众平台账号自定义菜单类
Oct 11 PHP
php支持断点续传、分块下载的类
May 02 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
PHP如何使用cURL实现Get和Post请求
Jul 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
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
PHP使用递归生成文章树
2015/04/21 PHP
PHP中filter函数校验数据的方法详解
2015/07/31 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
jquery select选中的一个小问题
2009/10/11 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
js的2种继承方式详解
2014/03/04 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
2017/10/31 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
python Opencv将图片转为字符画
2021/02/19 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
Python 获取项目根路径的代码
2019/09/27 Python
ipad上运行python的方法步骤
2019/10/12 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
2020/04/01 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
英语一分钟演讲稿
2014/04/29 职场文书
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
预备党员介绍人意见
2015/06/01 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技