[PHP] Goodby CSV를 사용하여 효율적으로 CSV 제거
Goodby CSV 소개
CSV 가져오기/내보내기에 사용되는 PHP 라이브러리로서 메모리 효율성이 뛰어납니다.
github : Goodby CSV
개인 응용 프로그램 등의 사용에서 많은 메모리 효율을 고려할 필요가 없을 수도 있지만 수백만, 수천만 줄의 대규모 프로젝트에서 CSV 처리는 대량의 메모리를 사용할 것이다.
Goodby CSV에서는 CSV의 모든 줄을 한꺼번에 읽지 않고 호출 함수로 한 줄 한 줄 처리합니다.
또한 SJIS-win, EUC-JP, UTF-8 등을 지원해 사양에 유연하게 대응할 수 있다.
필요조건
· PHP 5.3.2 이상
・mbstring
설치하다.
Composier를 사용하기 때문에 프로젝트 폴더에 composier를 설치합니다.curl -s http://getcomposer.org/installer | php
프로젝트 디렉터리의 루트에 있습니다.json을 만드는 것은 다음과 같다.{
"require": {
"goodby/csv": "*"
}
}
설치하다.php composer.phar install
사용법
config 구성
가져올 때use Goodby\CSV\Import\Standard\LexerConfig;
$config = new LexerConfig();
$config
->setDelimiter("\t") // Customize delimiter. Default value is comma(,)
->setEnclosure("'") // Customize enclosure. Default value is double quotation(")
->setEscape("\\") // Customize escape character. Default value is backslash(\)
->setToCharset('UTF-8') // Customize target encoding. Default value is null, no converting.
->setFromCharset('SJIS-win') // Customize CSV file encoding. Default value is null.
;
내보낼 때use Goodby\CSV\Export\Standard\ExporterConfig;
$config = new ExporterConfig();
$config
->setDelimiter("\t") // Customize delimiter. Default value is comma(,)
->setEnclosure("'") // Customize enclosure. Default value is double quotation(")
->setEscape("\\") // Customize escape character. Default value is backslash(\)
->setToCharset('SJIS-win') // Customize file encoding. Default value is null, no converting.
->setFromCharset('UTF-8') // Customize source encoding. Default value is null.
->setFileMode(CsvFileObject::FILE_MODE_WRITE) // Customize file mode and choose either write or append. Default value is write ('w'). See fopen() php docs
;
구분자, 괄호, 탈출 문자, 문자 코드, 파일 모드 등을 설정할 수 있습니다.
예: PDO를 통해 CSV 데이터를 DB로 가져오기
CSV 가져오기
users.csv1,tom,[email protected]
2,taro,[email protected]
3,hanako,[email protected]
hoge라는 DB에 users라는 책상이 있다고 가정해 보세요.
다음 작업을 수행합니다.
CsvImporter.phpuse Goodby\CSV\Import\Standard\Lexer;
use Goodby\CSV\Import\Standard\Interpreter;
use Goodby\CSV\Import\Standard\LexerConfig;
require_once("vendor/autoload.php");
//DBの設定(postgreSQLの場合)
$pdo = new PDO('pgsql:host=localhost;dbname=hoge', 'postgres', '');
//configの設定
$config = new LexerConfig();
$lexer = new Lexer($config);
$interpreter = new Interpreter();
$interpreter->addObserver(function(array $columns) use ($pdo) {
//データに処理を入れるときはこのあたりに
$stmt = $pdo->prepare('INSERT INTO users (id, name, email) VALUES (?, ?, ?)');
$stmt->execute($columns);
});
//読み込むCSVファイル
$lexer->parse('users.csv', $interpreter);
이렇게
예: PDO의 DB에서 CSV로 데이터 내보내기
다음 작업을 수행합니다.
CsvExporter.phpuse Goodby\CSV\Export\Standard\Exporter;
use Goodby\CSV\Export\Standard\ExporterConfig;
use Goodby\CSV\Export\Standard\CsvFileObject;
use Goodby\CSV\Export\Standard\Collection\PdoCollection;
use Goodby\CSV\Export\Standard\Collection\CallbackCollection;
require_once("vendor/autoload.php");
//DBの設定(postgreSQLの場合)
$pdo = new PDO('pgsql:host=localhost;dbname=hoge', 'postgres', '');
$stmt = $pdo->prepare("SELECT * FROM users");
$stmt->execute();
$collection = new CallbackCollection(new PdoCollection($stmt), function($row) {
//ここにデータの処理など
$row['name'] = strtoupper($row['name']);
return $row;
});
//configの設定 SJISで出力する
$config = new ExporterConfig();
$config->setToCharset('SJIS-win');
//エクスポート
$exporter = new Exporter($config);
$exporter->export('users_converted.csv', $collection);
다음 CSV를 내보냅니다.
users_converted.csv1,TOM,[email protected]
2,TARO,[email protected]
3,HANAKO,[email protected]
총결산
사용법이 간단하다.
줄 수가 상당히 많은 CSV를 처리할 때 메모리 효율을 높일 수 있습니다.
프로젝트에서 실제로 사용됩니다.
메모리 사용량 비교는 나중에 시간 나면 해보세요.
Reference
이 문제에 관하여([PHP] Goodby CSV를 사용하여 효율적으로 CSV 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tomitz/items/bc767d26f5fa56ada515
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
· PHP 5.3.2 이상
・mbstring
설치하다.
Composier를 사용하기 때문에 프로젝트 폴더에 composier를 설치합니다.curl -s http://getcomposer.org/installer | php
프로젝트 디렉터리의 루트에 있습니다.json을 만드는 것은 다음과 같다.{
"require": {
"goodby/csv": "*"
}
}
설치하다.php composer.phar install
사용법
config 구성
가져올 때use Goodby\CSV\Import\Standard\LexerConfig;
$config = new LexerConfig();
$config
->setDelimiter("\t") // Customize delimiter. Default value is comma(,)
->setEnclosure("'") // Customize enclosure. Default value is double quotation(")
->setEscape("\\") // Customize escape character. Default value is backslash(\)
->setToCharset('UTF-8') // Customize target encoding. Default value is null, no converting.
->setFromCharset('SJIS-win') // Customize CSV file encoding. Default value is null.
;
내보낼 때use Goodby\CSV\Export\Standard\ExporterConfig;
$config = new ExporterConfig();
$config
->setDelimiter("\t") // Customize delimiter. Default value is comma(,)
->setEnclosure("'") // Customize enclosure. Default value is double quotation(")
->setEscape("\\") // Customize escape character. Default value is backslash(\)
->setToCharset('SJIS-win') // Customize file encoding. Default value is null, no converting.
->setFromCharset('UTF-8') // Customize source encoding. Default value is null.
->setFileMode(CsvFileObject::FILE_MODE_WRITE) // Customize file mode and choose either write or append. Default value is write ('w'). See fopen() php docs
;
구분자, 괄호, 탈출 문자, 문자 코드, 파일 모드 등을 설정할 수 있습니다.
예: PDO를 통해 CSV 데이터를 DB로 가져오기
CSV 가져오기
users.csv1,tom,[email protected]
2,taro,[email protected]
3,hanako,[email protected]
hoge라는 DB에 users라는 책상이 있다고 가정해 보세요.
다음 작업을 수행합니다.
CsvImporter.phpuse Goodby\CSV\Import\Standard\Lexer;
use Goodby\CSV\Import\Standard\Interpreter;
use Goodby\CSV\Import\Standard\LexerConfig;
require_once("vendor/autoload.php");
//DBの設定(postgreSQLの場合)
$pdo = new PDO('pgsql:host=localhost;dbname=hoge', 'postgres', '');
//configの設定
$config = new LexerConfig();
$lexer = new Lexer($config);
$interpreter = new Interpreter();
$interpreter->addObserver(function(array $columns) use ($pdo) {
//データに処理を入れるときはこのあたりに
$stmt = $pdo->prepare('INSERT INTO users (id, name, email) VALUES (?, ?, ?)');
$stmt->execute($columns);
});
//読み込むCSVファイル
$lexer->parse('users.csv', $interpreter);
이렇게
예: PDO의 DB에서 CSV로 데이터 내보내기
다음 작업을 수행합니다.
CsvExporter.phpuse Goodby\CSV\Export\Standard\Exporter;
use Goodby\CSV\Export\Standard\ExporterConfig;
use Goodby\CSV\Export\Standard\CsvFileObject;
use Goodby\CSV\Export\Standard\Collection\PdoCollection;
use Goodby\CSV\Export\Standard\Collection\CallbackCollection;
require_once("vendor/autoload.php");
//DBの設定(postgreSQLの場合)
$pdo = new PDO('pgsql:host=localhost;dbname=hoge', 'postgres', '');
$stmt = $pdo->prepare("SELECT * FROM users");
$stmt->execute();
$collection = new CallbackCollection(new PdoCollection($stmt), function($row) {
//ここにデータの処理など
$row['name'] = strtoupper($row['name']);
return $row;
});
//configの設定 SJISで出力する
$config = new ExporterConfig();
$config->setToCharset('SJIS-win');
//エクスポート
$exporter = new Exporter($config);
$exporter->export('users_converted.csv', $collection);
다음 CSV를 내보냅니다.
users_converted.csv1,TOM,[email protected]
2,TARO,[email protected]
3,HANAKO,[email protected]
총결산
사용법이 간단하다.
줄 수가 상당히 많은 CSV를 처리할 때 메모리 효율을 높일 수 있습니다.
프로젝트에서 실제로 사용됩니다.
메모리 사용량 비교는 나중에 시간 나면 해보세요.
Reference
이 문제에 관하여([PHP] Goodby CSV를 사용하여 효율적으로 CSV 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tomitz/items/bc767d26f5fa56ada515
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
curl -s http://getcomposer.org/installer | php
{
"require": {
"goodby/csv": "*"
}
}
php composer.phar install
config 구성
가져올 때
use Goodby\CSV\Import\Standard\LexerConfig;
$config = new LexerConfig();
$config
->setDelimiter("\t") // Customize delimiter. Default value is comma(,)
->setEnclosure("'") // Customize enclosure. Default value is double quotation(")
->setEscape("\\") // Customize escape character. Default value is backslash(\)
->setToCharset('UTF-8') // Customize target encoding. Default value is null, no converting.
->setFromCharset('SJIS-win') // Customize CSV file encoding. Default value is null.
;
내보낼 때use Goodby\CSV\Export\Standard\ExporterConfig;
$config = new ExporterConfig();
$config
->setDelimiter("\t") // Customize delimiter. Default value is comma(,)
->setEnclosure("'") // Customize enclosure. Default value is double quotation(")
->setEscape("\\") // Customize escape character. Default value is backslash(\)
->setToCharset('SJIS-win') // Customize file encoding. Default value is null, no converting.
->setFromCharset('UTF-8') // Customize source encoding. Default value is null.
->setFileMode(CsvFileObject::FILE_MODE_WRITE) // Customize file mode and choose either write or append. Default value is write ('w'). See fopen() php docs
;
구분자, 괄호, 탈출 문자, 문자 코드, 파일 모드 등을 설정할 수 있습니다.예: PDO를 통해 CSV 데이터를 DB로 가져오기
CSV 가져오기
users.csv
1,tom,[email protected]
2,taro,[email protected]
3,hanako,[email protected]
hoge라는 DB에 users라는 책상이 있다고 가정해 보세요.다음 작업을 수행합니다.
CsvImporter.php
use Goodby\CSV\Import\Standard\Lexer;
use Goodby\CSV\Import\Standard\Interpreter;
use Goodby\CSV\Import\Standard\LexerConfig;
require_once("vendor/autoload.php");
//DBの設定(postgreSQLの場合)
$pdo = new PDO('pgsql:host=localhost;dbname=hoge', 'postgres', '');
//configの設定
$config = new LexerConfig();
$lexer = new Lexer($config);
$interpreter = new Interpreter();
$interpreter->addObserver(function(array $columns) use ($pdo) {
//データに処理を入れるときはこのあたりに
$stmt = $pdo->prepare('INSERT INTO users (id, name, email) VALUES (?, ?, ?)');
$stmt->execute($columns);
});
//読み込むCSVファイル
$lexer->parse('users.csv', $interpreter);
이렇게예: PDO의 DB에서 CSV로 데이터 내보내기
다음 작업을 수행합니다.
CsvExporter.php
use Goodby\CSV\Export\Standard\Exporter;
use Goodby\CSV\Export\Standard\ExporterConfig;
use Goodby\CSV\Export\Standard\CsvFileObject;
use Goodby\CSV\Export\Standard\Collection\PdoCollection;
use Goodby\CSV\Export\Standard\Collection\CallbackCollection;
require_once("vendor/autoload.php");
//DBの設定(postgreSQLの場合)
$pdo = new PDO('pgsql:host=localhost;dbname=hoge', 'postgres', '');
$stmt = $pdo->prepare("SELECT * FROM users");
$stmt->execute();
$collection = new CallbackCollection(new PdoCollection($stmt), function($row) {
//ここにデータの処理など
$row['name'] = strtoupper($row['name']);
return $row;
});
//configの設定 SJISで出力する
$config = new ExporterConfig();
$config->setToCharset('SJIS-win');
//エクスポート
$exporter = new Exporter($config);
$exporter->export('users_converted.csv', $collection);
다음 CSV를 내보냅니다.users_converted.csv
1,TOM,[email protected]
2,TARO,[email protected]
3,HANAKO,[email protected]
총결산
사용법이 간단하다.
줄 수가 상당히 많은 CSV를 처리할 때 메모리 효율을 높일 수 있습니다.
프로젝트에서 실제로 사용됩니다.
메모리 사용량 비교는 나중에 시간 나면 해보세요.
Reference
이 문제에 관하여([PHP] Goodby CSV를 사용하여 효율적으로 CSV 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tomitz/items/bc767d26f5fa56ada515
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([PHP] Goodby CSV를 사용하여 효율적으로 CSV 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tomitz/items/bc767d26f5fa56ada515텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)