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

 这篇文章主要介绍了PHP按行读取、处理较大CSV文件的代码实例,需要的朋友可以参考下

对于数百万条数据量的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以内的文件进行过测试,运行通畅,对于更大的文件未做测试,请斟酌使用或加以改进。

时间: 2024-11-01 20:32:34

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

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

对于数百万条数据量的CSV文件,文件大小可能达到数百M,如果简单读取的话很可能出现超时或者卡死的现象. 为了成功将CSV文件里的数据导入数据库,分批处理是非常必要的. 下面这个函数是读取CSV文件中指定的某几行数据: 复制代码 代码如下: /** * csv_get_lines 读取CSV文件中的某几行数据 * @param $csvfile csv文件路径 * @param $lines 读取行数 * @param $offset 起始行数 * @return array * */functi

asp.net+js 实现无刷新上传解析csv文件的代码_javascript技巧

前阵子工作中用到,贴上代码,仅保留上传有关的代码,发现code其实很少. 上传页面html/js 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xht

C#写的一段解析 CSV 文件的代码

using System; /** * The Comma Separated Value (CSV) File Format: http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm * 描述:解析 CSV 格式的文件. * 由这里 http://blog.csdn.net/emu/archive/2003/03/01/16338.aspx 的Java代码改写而来(增加了行处理) * 日期: 2004-10-22 14:55 */namespa

PHP快速按行读取CSV大文件的封装类分享

 这篇文章主要介绍了一个PHP快速按行读取CSV大文件的封装类,这个类同时也适用于其它体积较大的文本文件,需要的朋友可以参考下 CSV大文件的读取已经在前面讲述过了(PHP按行读取.处理较大CSV文件的代码实例),但是如何快速完整的操作大文件仍然还存在一些问题.   1.如何快速获取CSV大文件的总行数?   办法一:直接获取文件内容,使用换行符进行拆分得出总行数,这种办法对小文件可行,处理大文件时不可行: 办法二:使用fgets一行一行遍历,得出总行数,这种办法比办法一好一些,但大文件仍有超时

PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)_php实例

CSV大文件的读取已经在前面讲述过了(PHP按行读取.处理较大CSV文件的代码实例),但是如何快速完整的操作大文件仍然还存在一些问题. 1.如何快速获取CSV大文件的总行数? 办法一:直接获取文件内容,使用换行符进行拆分得出总行数,这种办法对小文件可行,处理大文件时不可行:办法二:使用fgets一行一行遍历,得出总行数,这种办法比办法一好一些,但大文件仍有超时的可能:办法三:借助SplFileObject类,直接将指针定位到文件末尾,通过SplFileObject::key方法获取总行数,这种办

php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法_php技巧

date.csv:"ID" "NAME" "EMAIL""1" "小明" "xm@163.com""2" "小东" "xd@sina.com""3" "小少" "shaozi@hotmai.com" 读取这个csv文件 复制代码 代码如下: <?php$handl

c语言读取csv文件和c++读取csv文件示例分享_C 语言

C读取csv文件 复制代码 代码如下: #include <stdio.h>#include <string.h> char *trim(char *str){    char *p = str;     while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')        p ++;    str = p;     p = str + strlen(str) - 1;     while (*p == ' ' ||

python读取csv文件示例(python操作csv)_python

复制代码 代码如下: import csvfor line in open("test.csv"):name,age,birthday = line.split(",")name = name.strip(' \t\r\n');age = age.strip(' \t\r\n');birthday = birthday.strip(' \t\r\n'); print (name + '\t' + age + '\t' + birthday) csv文件 复制代码 代

java-【求助】怎么用Java读txt文件,根据其中的条件,输出一个csv文件?(具体情况见内容)

问题描述 [求助]怎么用Java读txt文件,根据其中的条件,输出一个csv文件?(具体情况见内容) 用Java, 读txt文件(根据Eclipse软件的下方的console改成的log.txt) -------------------------------------- 例: [2013-08-26 10:45:45,042] ERROR does not exist. [2013-08-26 14:43:09,145] ERROR Certification failed. [2013-0