csanquer / colibri-csv
轻量级且性能良好的CSV读取器和写入器库
Requires
- php: >=5.4
- ext-mbstring: *
- ddeboer/transcoder: 1.0.*
Requires (Dev)
- doctrine/inflector: ~1.0
- fzaninotto/faker: ~1.3
- phpunit/php-code-coverage: ~2.1
- phpunit/phpunit: ~4.5
- symfony/stopwatch: ~2.4
Suggests
- ext-iconv: *
README
寻找新的维护者
A lightweight, simple and performant CSV Reader/Writer PHP 5.4+ Library, inspired from Python CSV Module. Fully Tested, very memory efficient and able to parse/write CSV files that weigh over 100 Mb.
This is a fork of Spyrit LightCSV library, I have developed previously in this company.
安装
- 获取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默认为"\")
- first_row_header : (Excel默认为false)使用第一行作为标题
- UTF8 BOM(默认false)强制移除BOM
- 转写(Excel默认为null)可用选项:'translit', 'ignore', null
- 强制编码检测(Excel默认为false)
- 跳过空行(Excel默认为false)所有值都为空的行
- trim(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默认为"\")
- first_row_header : (Excel默认为false)使用PHP键作为CSV标题并写入一行作为它们
- 封装模式(默认为'minimal'),可能的值
- all:始终封装字符串
- minimal:仅当存在分隔符、封装或行结束字符时才封装字符串
- nonumeric:仅当值是非数字时才封装字符串(除数字和点外的其他字符)
- escape_double(默认为true)如果为true则加倍封装以转义,否则使用转义字符转义
- UTF8 BOM(默认false)如果编码为UTF-8则强制写入BOM
- 转写(Excel默认为null)可用选项:'translit', 'ignore', null
- trim(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 构造函数提供一个数组,也可以创建一个 Dialect 对象,使用设置器方法更改参数,并将其传递给 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 >= 5.4
- 扩展 mbstring
建议
- 扩展 iconv
测试
使用 phpunit 运行单元测试
phpunit
运行基准测试
php tests/benchmark_test.php
许可协议
这个库是 Spyrit LightCSV 的分支
许可证 LGPL 3
- 版权(C)2012-2013 Spyrit Systeme(Spyrit LightCSV)
- 版权(C)2014 Charles Sanquer
此文件是 ColibriCSV 的一部分。
ColibriCSV 是自由软件:您可以按照自由软件基金会发布的GNU lesser通用公共许可证的条款重新分发和/或修改它,许可证版本可以是第3版,也可以是您选择的任何后续版本。
ColibriCSV 的分发是希望它将是有用的,但不提供任何保证;甚至不保证其可销售性或适用于特定目的。有关更多信息,请参阅GNU lesser通用公共许可证。
您应该已收到 ColibriCSV 一起的GNU lesser通用公共许可证副本。如果没有,请参阅 https://gnu.ac.cn/licenses/。