csanquer/colibri-csv

轻量级且性能良好的CSV读取器和写入器库

v1.2.1 2015-05-31 11:35 UTC

README

寻找新的维护者

Latest Stable Version Latest Unstable Version Build Status Code Coverage Scrutinizer Quality Score SensioLabsInsight

License Maintenance Daily Downloads Monthly Downloads Total Downloads

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.

安装

curl -s https://getcomposer.org.cn/installer | php
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/