1、如何快速获取CSV大文件的总行数?

办法一:直接获取文件内容,使用换行符进行拆分得出总行数,这种办法对小文件可行,处理大文件时不可行;

办法二:使用fgets一行一行遍历,得出总行数,这种办法比办法一好一些,但大文件仍有超时的可能;

办法三:借助SplFileObject类,直接将指针定位到文件末尾,通过SplFileObject::key方法获取总行数,这种办法可行,且高效。

具体实现方法:

代码如下:

$csv_file = 'path/bigfile.csv';

$spl_object = new SplFileObject($csv_file, 'rb');

$spl_object->seek(filesize($csv_file));

echo $spl_object->key();

2、如何快速获取CSV大文件的数据?

仍然使用PHP的SplFileObject类,通过seek方法实现快速定位。

代码如下:

$csv_file = 'path/bigfile.csv';

$start = 100000; // 从第100000行开始读取

$num = 100; // 读取100行

$data = array();

$spl_object = new SplFileObject($csv_file, 'rb');

$spl_object->seek($start);

while ($num-- && !$spl_object->eof()) {

$data[] = $spl_object->fgetcsv();

$spl_object->next();

}

print_r($data);

3、综合上面两点,整理成一个csv文件读取的类:

代码如下:

class CsvReader {

private $csv_file;

private $spl_object = null;

private $error;

public function __construct($csv_file = '') {

if($csv_file && file_exists($csv_file)) {

$this->csv_file = $csv_file;

}

}

public function set_csv_file($csv_file) {

if(!$csv_file || !file_exists($csv_file)) {

$this->error = 'File invalid';

return false;

}

$this->csv_file = $csv_file;

$this->spl_object = null;

}

public function get_csv_file() {

return $this->csv_file;

}

private function _file_valid($file = '') {

$file = $file ? $file : $this->csv_file;

if(!$file || !file_exists($file)) {

return false;

}

if(!is_readable($file)) {

return false;

}

return true;

}

private function _open_file() {

if(!$this->_file_valid()) {

$this->error = 'File invalid';

return false;

}

if($this->spl_object == null) {

$this->spl_object = new SplFileObject($this->csv_file, 'rb');

}

return true;

}

public function get_data($length = 0, $start = 0) {

if(!$this->_open_file()) {

return false;

}

$length = $length ? $length : $this->get_lines();

$start = $start - 1;

$start = ($start < 0) ? 0 : $start;

$data = array();

$this->spl_object->seek($start);

while ($length-- && !$this->spl_object->eof()) {

$data[] = $this->spl_object->fgetcsv();

$this->spl_object->next();

}

return $data;

}

public function get_lines() {

if(!$this->_open_file()) {

return false;

}

$this->spl_object->seek(filesize($this->csv_file));

return $this->spl_object->key();

}

public function get_error() {

return $this->error;

}

}

4、调用方法如下:

代码如下:

include('CsvReader.class.php');

$csv_file = 'path/bigfile.csv';

$csvreader = new CsvReader($csv_file);

$line_number = $csvreader->get_lines();

$data = $csvreader->get_data(10);

echo $line_number, chr(10);

print_r($data);

总结,上述CsvReader类并不只针对CSV大文件,对于其他文本类型的大文件或超大文件同样可用,前提是将类中fgetcsv方法稍加改动为fgets即可。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php读取csv指定行_PHP快速读取CSV大文件指定行相关推荐

  1. linux 快速删除大量/大文件

    linux 快速删除大量/大文件 经常会测试海量大数据,在不同文件系统下执行列出(list),删除(rm)等操作的执行时间,下面列出了,执行删除50万个文件时,使用不同的命令或者脚本,执行时间! 从上 ...

  2. php读取大文件某行内容,php读取大文件最后几行数据的实现代码

    /* * 读取大文件最后几行数据 * by www.jbxue.com */ $file = $handledir.'/venocap.1'; $fp = fopen($file, "r&q ...

  3. Python处理CSV大文件特定行数据

    通常处理csv大文件,需要从文件第一行开始遍历,遍历到指定行才开始进行相应的处理,如果能直接处理指定行数据以优化处理流程,这样可以提高执行效率.下面将举出常见的知识点提供参考. 1.获取csv行数 # ...

  4. 如何在Python中便宜地获取大文件的行数?

    我需要在python中获取一个大文件(数十万行)的行数. 内存和时间最有效的方法是什么? 目前,我这样做: def file_len(fname):with open(fname) as f:for ...

  5. linux查看文件内容行数,Linux 中如何查看文件的行数,字数,字节数

    在 Linux 系统使用中,我们经常需要查看或统计文本文件中的行数,字数,字节数等内容,那么怎么快捷的统计出文件中这些关键数据呢. 在Linux系统中这统计非常方便,只需要简单的几个命令就可以搞定,这 ...

  6. Linux服务器操作系统快速删除大量/大文件

    前言 注意本文说的"海量"并不是指体积大,而是指数量,比如一个目录下有数百万个小文件.最近在优化服务器时发现postfix下的maildrop目录和clientmqueue目录还有 ...

  7. 电脑快速复制粘贴大文件

    方法: 利用系统命令符快速复制大文件的方法 1.复制文件路径+文件名.后缀名 2.copy +上面获取的地址,复制到txt文本,将文本保存为.bat格式,将bat文件放置到要拷贝的地方,直接打开或运行 ...

  8. [C#]统计文本文件txt中的行数(快速读取)

    快速统计文本文件中的行数( StreamReader.ReadLine() ): 测试代码如下: 1 //读取txt文件中总行数的方法 2 public static int requestMetho ...

  9. php读取大文件某行内容,PHP读取和修改大文件的某行内容_PHP教程

    最近碰到一个比较有趣的问题,就是修改某个文件的某一行字符,不过文件太大,file()直接读取是不可能的,我使用fgets来跳转到指定行,并用fwrite修改某个字符串: $fp = fopen(d:/ ...

最新文章

  1. js中两个感叹号的原理与用法分析
  2. 前端学习(1676):前端系列实战课程之贪吃蛇游戏设计
  3. 【渝粤教育】电大中专药物分析技术基础 (2)_1作业 题库
  4. 重置电脑的网络配置 -- 解决防火墙问题导致的应用启动失败
  5. 2022年起重机械指挥判断题及答案
  6. WiFi管理帧(四)(TWT)
  7. 解析十大网络防骗术 全面防范网络欺诈
  8. 网页连接正常软件无法连接服务器,网络连接正常网页却无法打开是什么原因 怎么解决方法教程...
  9. dede后台系统基本参数空白怎么办?
  10. springboot毕业设计 基于springboot医院预约挂号系统毕业设计设计与实现参考
  11. 基于WiFi的人体感知
  12. ORDER: OpenWorld Object Detection on Road Scenes
  13. java-net-php-python-jspm人力外包服务公司招聘管理系统计算机毕业设计程序
  14. Elasticsearch集成(二)
  15. IDEA插件系列(87):Base64 image encoder插件——以base64编码的形式查看图像
  16. 动手实验 CVE-2010-3333 Microsoft RTF栈溢出漏洞
  17. Linux工具学习之【git】
  18. 谷粒商城--订单服务--高级篇笔记十一
  19. ThinkPHP 笔记
  20. 如何装双系统xp和linux,如何安装xp和linux双系统

热门文章

  1. Java 7:如何编写非常快速的Java代码
  2. 带有Java和Axis2的JSON Web服务
  3. Tomcat中的零停机部署(和回滚); 演练和清单
  4. 核心Java面试答案不正确
  5. opencv生成日志_OpenCV-Utils学习日志:VideoCapture使用样例
  6. 审批流_怎样让审批工作流和应用数据分离?
  7. python存数据到excel_python爬取的数据--保存数据到excel
  8. Servlet规范中定义的过滤器
  9. 设置 input元素placeholder的字体颜色
  10. Windows 7 下安装 Oracle 数据库和 PL/SQL Developer