8ctopus / nano-csv
读取 csv 和 Excel xlsx 文件
1.3.11
2023-12-28 11:13 UTC
Requires
- php: >=8.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- nunomaduro/collision: ^6.2
- phpmd/phpmd: ^2.13
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^10
README
解析 csv 和 Excel xlsx 文件
特性
- 解析 csv 和 Excel xlsx 文件
- 无依赖,快速且内存占用低
- 非常小的代码库:1100 行代码
- 自动检测文件编码和行结束符
- 自动检测 csv 分隔符、封装符和头部存在性
- 支持 Unicode
安装和演示
composer require 8ctopus/nano-csv
- 简单的 csv 解析
use Oct8pus\CSV\CSV; require_once './vendor/autoload.php'; $csv = new CSV(__DIR__ .'/samples/ascii-mac-header.csv'); echo $csv ->autoDetect() . PHP_EOL; while ($row = $csv->readNextRow()) { echo implode(', ', $row) . PHP_EOL; }
file: /dev/github/nano-csv/samples/ascii-mac-header.csv size: 500 BOM: None encoding: ASCII line ending: Mac lines count: 9 separator: , enclosure: " header: true rows count: 8 columns (13): Month, Average, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 May, 0.1, 0, 0, 1, 1, 0, 0, 0, 2, 0, 0, 0 Jun, 0.5, 2, 1, 1, 0, 0, 1, 1, 2, 2, 0, 1 Jul, 0.7, 5, 1, 1, 2, 0, 1, 3, 0, 2, 2, 1 Aug, 2.3, 6, 3, 2, 4, 4, 4, 7, 8, 2, 2, 3 Sep, 3.5, 6, 4, 7, 4, 2, 8, 5, 2, 5, 2, 5 Oct, 2.0, 8, 0, 1, 3, 2, 5, 1, 5, 2, 3, 0 Nov, 0.5, 3, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1 Dec, 0.0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
- 和一些实用选项
$csv = new CSV(__DIR__ .'/samples/ascii-mac-header.csv'); $csv ->autoDetect() // convert string to number ->setConvertNumbers(true) // return associative array ->setAssociativeArray(true); $average = 0; while ($row = $csv->readNextRow()) { $average += $row['Average']; } echo "Average from May to Dec: {$average}" . PHP_EOL;
Average from May to Dec: 9.6
- Excel xlsx 解析
use Oct8pus\CSV\XLSX; $xls = new XLSX(__DIR__ .'/samples/test.xlsx'); echo $xls ->autoDetect() . PHP_EOL; while ($row = $xls->readNextRow()) { echo implode(', ', $row) . PHP_EOL; }
file: K:\dev\github\nano-csv/samples\test.csv size: 174 BOM: UTF-8 encoding: UTF-8 line ending: Linux lines count: 9 separator: , enclosure: none header: true rows count: 7 columns (5): name, class, weight, empty, height cat, mammal, 8, , 0.2 rabbit, mammal, 0.6, , 0.2 dog, mammal, 20, , 0.7 puma, mammal, 30, , 0.6 pinguin, bird, 10, , 0.4 bear, mammal, 300, , 1 bat, mammal, 0.1, , 0.1
也查看 demo-*
文件。
测试
composer test
代码规范
composer fix
composer fix-risky
待办事项
- 使用只读属性
- 检测转义字符
- 重构读取函数
- 制作一个真正复杂的测试文件 - 检测封装符内的转义字符
- 与最流行的 csv 解析器比较性能
致谢
https://filesamples.com/formats/csv
https://eforexcel.com/wp/downloads-18-sample-csv-files-data-sets-for-testing-sales/