{"id":19217069,"url":"https://github.com/8ctopus/nano-csv","last_synced_at":"2026-01-28T18:04:42.000Z","repository":{"id":54380007,"uuid":"522254172","full_name":"8ctopus/nano-csv","owner":"8ctopus","description":"Yet another php csv/xlsx parser","archived":false,"fork":false,"pushed_at":"2025-11-27T11:12:31.000Z","size":225,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-15T17:22:43.821Z","etag":null,"topics":["csv","excel","import","parser","php","xlsx"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/8ctopus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-08-07T15:44:17.000Z","updated_at":"2025-11-27T06:54:57.000Z","dependencies_parsed_at":"2023-12-28T12:31:16.630Z","dependency_job_id":"595043c7-7b45-4994-9132-49475f521761","html_url":"https://github.com/8ctopus/nano-csv","commit_stats":{"total_commits":171,"total_committers":1,"mean_commits":171.0,"dds":0.0,"last_synced_commit":"80c06b6ebf4cf657ed35a7bf51531b1aa54a01d2"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/8ctopus/nano-csv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8ctopus%2Fnano-csv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8ctopus%2Fnano-csv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8ctopus%2Fnano-csv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8ctopus%2Fnano-csv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/8ctopus","download_url":"https://codeload.github.com/8ctopus/nano-csv/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8ctopus%2Fnano-csv/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28848368,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T15:15:36.453Z","status":"ssl_error","status_checked_at":"2026-01-28T15:15:13.020Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csv","excel","import","parser","php","xlsx"],"created_at":"2024-11-09T14:20:00.622Z","updated_at":"2026-01-28T18:04:41.983Z","avatar_url":"https://github.com/8ctopus.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nano csv\n\n[![packagist](https://poser.pugx.org/8ctopus/nano-csv/v)](https://packagist.org/packages/8ctopus/nano-csv)\n[![downloads](https://poser.pugx.org/8ctopus/nano-csv/downloads)](https://packagist.org/packages/8ctopus/nano-csv)\n[![min php version](https://poser.pugx.org/8ctopus/nano-csv/require/php)](https://packagist.org/packages/8ctopus/nano-csv)\n[![license](https://poser.pugx.org/8ctopus/nano-csv/license)](https://packagist.org/packages/8ctopus/nano-csv)\n[![tests](https://github.com/8ctopus/nano-csv/actions/workflows/tests.yml/badge.svg)](https://github.com/8ctopus/nano-csv/actions/workflows/tests.yml)\n![code coverage badge](https://raw.githubusercontent.com/8ctopus/nano-csv/image-data/coverage.svg)\n![lines of code](https://raw.githubusercontent.com/8ctopus/nano-csv/image-data/lines.svg)\n\nParse csv and Excel xlsx files\n\n## features\n\n- parse csv and Excel xlsx files\n- no dependencies, fast and low memory footprint\n- very small code base: 1100 lines of code\n- auto detect file encoding and line endings\n- auto detect csv separator, enclosure and header presence\n- unicode support\n\n## install and demo\n\n    composer require 8ctopus/nano-csv\n\n- Simple csv parsing\n\n```php\nuse Oct8pus\\CSV\\CSV;\n\nrequire_once __DIR__ . '/vendor/autoload.php';\n\n$csv = new CSV(__DIR__ .'/samples/ascii-mac-header.csv');\n\necho $csv\n    -\u003eautoDetect() . PHP_EOL;\n\nwhile ($row = $csv-\u003ereadNextRow()) {\n    echo implode(', ', $row) . PHP_EOL;\n}\n```\n\n```txt\nfile: /dev/github/nano-csv/samples/ascii-mac-header.csv\nsize: 500\nBOM: None\nencoding: ASCII\nline ending: Mac\nlines count: 9\nseparator: ,\nenclosure: \"\nheader: true\nrows count: 8\ncolumns (13): Month, Average, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015\n\nMay, 0.1, 0, 0, 1, 1, 0, 0, 0, 2, 0, 0, 0\nJun, 0.5, 2, 1, 1, 0, 0, 1, 1, 2, 2, 0, 1\nJul, 0.7, 5, 1, 1, 2, 0, 1, 3, 0, 2, 2, 1\nAug, 2.3, 6, 3, 2, 4, 4, 4, 7, 8, 2, 2, 3\nSep, 3.5, 6, 4, 7, 4, 2, 8, 5, 2, 5, 2, 5\nOct, 2.0, 8, 0, 1, 3, 2, 5, 1, 5, 2, 3, 0\nNov, 0.5, 3, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1\nDec, 0.0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1\n```\n\n- And some handy options\n\n```php\n$csv = new CSV(__DIR__ .'/samples/ascii-mac-header.csv');\n\n$csv\n    -\u003eautoDetect()\n    // convert string to number\n    -\u003esetConvertNumbers(true)\n    // return associative array\n    -\u003esetAssociativeArray(true);\n\n$average = 0;\n\nwhile ($row = $csv-\u003ereadNextRow()) {\n    $average += $row['Average'];\n}\n\necho \"Average from May to Dec: {$average}\" . PHP_EOL;\n```\n\n```txt\nAverage from May to Dec: 9.6\n```\n\n- Excel xlsx parsing\n\n```php\nuse Oct8pus\\CSV\\XLSX;\n\n$xls = new XLSX(__DIR__ .'/samples/test.xlsx');\n\necho $xls\n    -\u003eautoDetect() . PHP_EOL;\n\nwhile ($row = $xls-\u003ereadNextRow()) {\n    echo implode(', ', $row) . PHP_EOL;\n}\n```\n\n```txt\nfile: K:\\dev\\github\\nano-csv/samples\\test.csv\nsize: 174\nBOM: UTF-8\nencoding: UTF-8\nline ending: Linux\nlines count: 9\nseparator: ,\nenclosure: none\nheader: true\nrows count: 7\ncolumns (5): name, class, weight, empty, height\n\ncat, mammal, 8, , 0.2\nrabbit, mammal, 0.6, , 0.2\ndog, mammal, 20, , 0.7\npuma, mammal, 30, , 0.6\npinguin, bird, 10, , 0.4\nbear, mammal, 300, , 1\nbat, mammal, 0.1, , 0.1\n```\n\nAlso look at the `demo-*` files.\n\n## tests\n\n    composer test\n\n## clean code\n\n    composer fix\n    composer fix-risky\n\n## todo\n\n- use readonly properties\n- detect escape char\n- refactor read\n- make a really tricky test file - detect escape character within enclosures\n- compare performance against most popular csv parsers\n\n## credits\n\n    https://filesamples.com/formats/csv\n    https://eforexcel.com/wp/downloads-18-sample-csv-files-data-sets-for-testing-sales/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F8ctopus%2Fnano-csv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F8ctopus%2Fnano-csv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F8ctopus%2Fnano-csv/lists"}