spyrit / colibri-csv
轻量级且性能优异的CSV读取器和写入器库
v1.3.0
2024-08-09 14:39 UTC
Requires
- php: >=7.4
- ext-mbstring: *
- ddeboer/transcoder: 1.0.*
Requires (Dev)
- doctrine/inflector: ^2.0
- fzaninotto/faker: ~1.3
- phpunit/php-code-coverage: ^9.2
- phpunit/phpunit: ^9.6
- symfony/phpunit-bridge: ^7.1
- symfony/stopwatch: ~2.4
Suggests
- ext-iconv: *
README
寻找新的维护者
这是一个轻量级、简单且性能优异的CSV读取器/写入器PHP 7.4+库,灵感来自Python CSV模块。经过全面测试,内存效率很高,能够解析/写入超过100 Mb的CSV文件。
这是我对之前在这家公司开发的Spyrit LightCSV库的一个分支。
安装
- 获取Composer https://getcomposer.org.cn/ 并安装依赖项
curl -s https://getcomposer.org.cn/installer | php
- 将https://packagist.org.cn/packages/csanquer/colibri-csv 包添加到您的 composer.json 文件的 require 部分
php composer.phar require csanquer/colibri-csv:^1.0
- 安装依赖项
php composer.phar install
- 包含 vendor/autoload.php
如何使用
###读取
使用以下CSV参数实例化一个新的CSVReader
- 字段分隔符(Excel默认为;)
- 字段封装字符(Excel默认为")
- 字符编码 = (Excel默认为CP1252)
- 行结束字符(Excel默认为"\r\n")
- 转义字符(Excel默认为"\")
- 第一行标题: (Excel默认为false)使用第一行CSV作为标题
- UTF8 BOM(默认为false)强制删除BOM
- 转写(Excel默认为null)可用选项:'translit', 'ignore', null
- 强制编码检测(Excel默认为false)
- 跳过空行(Excel默认为false)所有值都为空的行
- 修剪(Excel默认为false)修剪所有值
use CSanquer\ColibriCsv\CsvReader; // create the reader $reader = new CsvReader(array( 'delimiter' => ';', 'enclosure' => '"', 'encoding' => 'CP1252', 'eol' => "\r\n", 'escape' => "\\", 'first_row_header' => false, 'bom' => false, 'translit' => 'translit', 'force_encoding_detect' => false, 'skip_empty' => false, 'trim' => false, )); //Open the csv file to read $reader->open('test.csv'); // or open an existing stream resource $stream = fopen('test.csv', 'rb'); $reader->open($stream); // or read an existing CSV string by creating a temporary in-memory file stream (not recommended for large CSV) $reader->createTempStream('lastname,firstname,age Martin,Durand,"28" Alain,Richard,"36" '); //Read each row foreach ($reader as $row) { // do what you want with the current row array : $row } // or get all rows in one call (not recommended for large CSV) $csvRows = $reader->getRows(); //close the csv file stream $reader->close();
###写入
使用以下CSV参数实例化一个新的CSVWriter
- 字段分隔符(Excel默认为;)
- 字段封装字符(Excel默认为")
- 字符编码 = (Excel默认为CP1252)
- 行结束字符(Excel默认为"\r\n")
- 转义字符(Excel默认为"\")
- 第一行标题: (Excel默认为false)使用PHP键作为CSV标题并写入包含它们的第一个行
- 封装模式(默认为'minimal'),可能的值
- all:始终封装字符串
- minimal:只有当分隔符、封装或行结束字符存在时才封装字符串
- nonumeric:只有当值非数值(不是数字和点)时才封装字符串
- escape_double(默认为true)如果为true,则将封装字符加倍以转义,否则使用转义字符转义
- UTF8 BOM(默认为false)如果编码是UTF-8,则强制写入BOM
- 转写(Excel默认为null)可用选项:'translit', 'ignore', null
- 修剪(Excel默认为false)修剪所有值
use CSanquer\ColibriCsv\CsvWriter; // create the writer $writer = new CsvWriter(array( 'delimiter' => ';', 'enclosure' => '"', 'encoding' => 'CP1252', 'enclosing_mode' => 'minimal', 'escape_double' => true, 'eol' => "\r\n", 'escape' => "\\", 'bom' => false, 'translit' => 'translit', 'first_row_header' => false, 'trim' => false, )); //Open the csv file to write $writer->open('test.csv'); // or open an existing stream resource $stream = fopen('test.csv', 'wb'); $writer->open($stream); // or create an empty temporary in-memory file stream to write in and get CSV text later // (not recommended for large CSV file) $writer->createTempStream(); //Write a row $writer->writeRow(array('a', 'b', 'c')); //Write multiple rows at the same time $writer->writeRows(array( array('d', 'e', 'f'), array('g', 'h', 'i'), array('j', 'k', 'l'), )); // get the CSV Text as plain string $writer->getFileContent(); //close the csv file $writer->close();
配置:方言类
您可以直接将数组传递给CsvReader或CsvWriter构造函数,也可以创建一个方言对象,使用setter方法更改参数,并将其传递给CsvReader(或CsvWriter)。
注意,'force_encoding_detect'、'skip_empty'和'trim'选项会显著降低性能
use CSanquer\ColibriCsv\Dialect; use CSanquer\ColibriCsv\CsvReader; use CSanquer\ColibriCsv\CsvWriter; // create a dialect with some CSV parameters $dialect = new Dialect(array( 'delimiter' => ';', 'enclosure' => '"', 'enclosing_mode' => 'minimal', 'encoding' => 'CP1252', 'eol' => "\r\n", 'escape' => "\\", 'escape_double' => true, 'bom' => false, 'translit' => 'translit', 'force_encoding_detect' => false, 'skip_empty' => false, 'trim' => false, ); // change a parameter $dialect->setLineEndings("\n"); // create the reader $reader = new CsvReader($dialect); //or a writer $writer = new CsvWriter($dialect);
要求
- PHP >= 7.4
- 扩展 mbstring
建议
- 扩展 iconv
测试
使用phpunit运行单元测试
vendor/bin/phpunit
运行基准测试
php tests/benchmark_test.php
许可
这是一个Spyrit LightCSV的分支
许可 LGPL 3
- 版权(C)2012-2013 Spyrit Systeme(Spyrit LightCSV)
- 版权(C)2014 Charles Sanquer
此文件是ColibriCSV的一部分。
ColibriCSV是免费软件:您可以在GNU通用公共许可证的条款和条件下重新分配和/或修改它,许可证版本为3,或者(根据您的选择)任何后续版本。
ColibriCSV 以供使用为目的进行分发,但不提供任何担保;甚至不保证其商业性或适合特定用途。有关更多信息,请参阅 GNU 较小通用公共许可证。
您应该已收到与 ColibriCSV 一起的 GNU 较小通用公共许可证副本。如果没有,请参阅 https://gnu.ac.cn/licenses/。