我有包含/将包含数十万个条目的 excel(file.xls)/csv(file.csv) 文件,我猜甚至是数百万个。是否可以将这个文件拆分为多个文件?比如file.xls到file1.xls、file2.xls、file3.xls等等。
有什么图书馆可以使用吗?这可能在 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++;
}
}