我正在尝试拆分大的csv文件。现在我只能拆分带有50k列的csv文件。每当我尝试拆分100k它就不起作用。
我无法弄清楚什么是错的。
这是我用于100k的分割器的代码:
$inputFile = 'uploads/uploaded.csv';
$outputFile = 'uploads/output';
$rows = array_map('str_getcsv', file($inputFile));
$header = array_shift($rows);
$splitSize = 50000;
$in = fopen($inputFile, 'r');
fgetcsv($in, 1000, ",");
//array for file name
$stored_names = array();
$rowCount = 0;
$fileCount = 1;
//split csv
while (!feof($in)) {
if (($rowCount % $splitSize) == 0) {
if ($rowCount > 0) {
fclose($out);
}
$super_file_name = $outputFile . $fileCount++;
array_push($stored_names,$super_file_name.'.csv');
$out = fopen($super_file_name. '.csv', 'w');
//insert header
fputcsv($out,$header);
// array_push($stored_names,$out);
}
$data = fgetcsv($in);
if ($data)
fputcsv($out,$data);
$rowCount++;
}
fclose($out);
答案 0 :(得分:1)
我猜测您的问题是基于此代码的内存限制:
$rows = array_map('str_getcsv', file($inputFile));
$header = array_shift($rows);
将整个文件读入内存,将其拆分为数组数组,然后弹出第一行,然后抛弃其余部分。由于您只需要第一行,因此您无需阅读整个文件。而只是做一些像:
$fp = fopen($inputFile, 'r');
$headers = fgetcsv($fp);
然后您已经打开$fp
并指向拆分过程的第一个数据行。