我有一个包含/将包含数十万条甚至上百万条记录的excel(file.xls)/csv(file.csv)文件。是否可能将其拆分为多个文件?例如将file.xls拆分为file1.xls、file2.xls、file3.xls等等。
是否有任何可以使用的库?PHP能否实现?javascript呢? 我在哪里可以指定每个文件包含多少行?
谢谢。
是否有任何可以使用的库?PHP能否实现?javascript呢? 我在哪里可以指定每个文件包含多少行?
谢谢。
将CSV文件快速而简便地拆分为多个CSV文件的方法
$inputFile = 'input.csv';
$outputFile = 'output';
$splitSize = 10000;
$in = fopen($inputFile, 'r');
$rowCount = 0;
$fileCount = 1;
while (!feof($in)) {
if (($rowCount % $splitSize) == 0) {
if ($rowCount > 0) {
fclose($out);
}
$out = fopen($outputFile . $fileCount++ . '.csv', 'w');
}
$data = fgetcsv($in);
if ($data)
fputcsv($out, $data);
$rowCount++;
}
fclose($out);
是的,在PHP中使用CSV文件可以实现这一点。您只需迭代大文件并将每个X行分块,将这些行转发到另一个文件即可。
您可以在此答案中找到有关如何将大型CSV文件打开为迭代器的信息:
然后,您需要将迭代器分成每个X行的部分。可以按照以下概述完成:
只需将输出复制到多个<ul>...</ul>
HTML列表中,即可将其复制到新文件中。基本上就像在以下概述中一样工作:
SplFileObject::fputcsv
方法。请注意,你需要使用最新稳定版的PHP,否则你需要进行不同的操作,请参见fputcsv()
。我认为你也可以使用“按文件大小拆分”:
$part = 1;
$maxSize = 50;//50 Mb
$fopen = fopen('filename.csv','r') or die ('ERROR');
while (($line = fgetcsv($fopen, 10000, ";")) !== FALSE) {
$ftowrite = fopen("Part_$part.csv",'a');
fputcsv($ftowrite,$line);
clearstatcache();
$size = filesize ( "review_p$part.csv" ) / 1000000;
if ($size > $maxSize) {
fclose($ftowrite);
$part++;
}
}