php读取csv指定行_PHP快速读取CSV大文件指定行
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大文件指定行相关推荐
- linux 快速删除大量/大文件
linux 快速删除大量/大文件 经常会测试海量大数据,在不同文件系统下执行列出(list),删除(rm)等操作的执行时间,下面列出了,执行删除50万个文件时,使用不同的命令或者脚本,执行时间! 从上 ...
- php读取大文件某行内容,php读取大文件最后几行数据的实现代码
/* * 读取大文件最后几行数据 * by www.jbxue.com */ $file = $handledir.'/venocap.1'; $fp = fopen($file, "r&q ...
- Python处理CSV大文件特定行数据
通常处理csv大文件,需要从文件第一行开始遍历,遍历到指定行才开始进行相应的处理,如果能直接处理指定行数据以优化处理流程,这样可以提高执行效率.下面将举出常见的知识点提供参考. 1.获取csv行数 # ...
- 如何在Python中便宜地获取大文件的行数?
我需要在python中获取一个大文件(数十万行)的行数. 内存和时间最有效的方法是什么? 目前,我这样做: def file_len(fname):with open(fname) as f:for ...
- linux查看文件内容行数,Linux 中如何查看文件的行数,字数,字节数
在 Linux 系统使用中,我们经常需要查看或统计文本文件中的行数,字数,字节数等内容,那么怎么快捷的统计出文件中这些关键数据呢. 在Linux系统中这统计非常方便,只需要简单的几个命令就可以搞定,这 ...
- Linux服务器操作系统快速删除大量/大文件
前言 注意本文说的"海量"并不是指体积大,而是指数量,比如一个目录下有数百万个小文件.最近在优化服务器时发现postfix下的maildrop目录和clientmqueue目录还有 ...
- 电脑快速复制粘贴大文件
方法: 利用系统命令符快速复制大文件的方法 1.复制文件路径+文件名.后缀名 2.copy +上面获取的地址,复制到txt文本,将文本保存为.bat格式,将bat文件放置到要拷贝的地方,直接打开或运行 ...
- [C#]统计文本文件txt中的行数(快速读取)
快速统计文本文件中的行数( StreamReader.ReadLine() ): 测试代码如下: 1 //读取txt文件中总行数的方法 2 public static int requestMetho ...
- php读取大文件某行内容,PHP读取和修改大文件的某行内容_PHP教程
最近碰到一个比较有趣的问题,就是修改某个文件的某一行字符,不过文件太大,file()直接读取是不可能的,我使用fgets来跳转到指定行,并用fwrite修改某个字符串: $fp = fopen(d:/ ...
最新文章
- js中两个感叹号的原理与用法分析
- 前端学习(1676):前端系列实战课程之贪吃蛇游戏设计
- 【渝粤教育】电大中专药物分析技术基础 (2)_1作业 题库
- 重置电脑的网络配置 -- 解决防火墙问题导致的应用启动失败
- 2022年起重机械指挥判断题及答案
- WiFi管理帧(四)(TWT)
- 解析十大网络防骗术 全面防范网络欺诈
- 网页连接正常软件无法连接服务器,网络连接正常网页却无法打开是什么原因 怎么解决方法教程...
- dede后台系统基本参数空白怎么办?
- springboot毕业设计 基于springboot医院预约挂号系统毕业设计设计与实现参考
- 基于WiFi的人体感知
- ORDER: OpenWorld Object Detection on Road Scenes
- java-net-php-python-jspm人力外包服务公司招聘管理系统计算机毕业设计程序
- Elasticsearch集成(二)
- IDEA插件系列(87):Base64 image encoder插件——以base64编码的形式查看图像
- 动手实验 CVE-2010-3333 Microsoft RTF栈溢出漏洞
- Linux工具学习之【git】
- 谷粒商城--订单服务--高级篇笔记十一
- ThinkPHP 笔记
- 如何装双系统xp和linux,如何安装xp和linux双系统
热门文章
- Java 7:如何编写非常快速的Java代码
- 带有Java和Axis2的JSON Web服务
- Tomcat中的零停机部署(和回滚); 演练和清单
- 核心Java面试答案不正确
- opencv生成日志_OpenCV-Utils学习日志:VideoCapture使用样例
- 审批流_怎样让审批工作流和应用数据分离?
- python存数据到excel_python爬取的数据--保存数据到excel
- Servlet规范中定义的过滤器
- 设置 input元素placeholder的字体颜色
- Windows 7 下安装 Oracle 数据库和 PL/SQL Developer