我有104个字段的csv文件,但我只需要在mysql数据库中使用4个字段。每个文件大约有一百万行。 有人能告诉我有效的方法吗?将每一行读取到数组需要很长时间。 感谢
答案 0 :(得分:0)
您必须按照定义完整地阅读每一行。这是查找下一条记录(即换行符)的分隔符所必需的。您只需要丢弃您不需要的数据。 E.g:
$data = array();
$fh = fopen('data.csv', 'r');
$headers = fgetcsv($fh);
while ($row = fgetcsv($fh)) {
$row = array_combine($headers, $row);
$data[] = array_intersect_key($row, array_flip(array('foo', 'bar', 'baz')));
// alternatively, if you know the column index, something like:
// $data[] = array($row[1], $row[45], $row[60]);
}
这只保留列foo,bar和baz并丢弃其余部分。 从文件中读取(fgetcsv
)的速度和它一样快。如果您需要它更快,那么您必须实现自己的CSV标记器和解析器,它会跳过您不需要的列,甚至不会将它们临时存储在内存中;这带来了多少性能提升与实现此无bug所需的开发时间是非常值得商榷的。
简单的excel宏可以删除所有不必要的列(104个中的100个) 在第二。我正在寻找类似的解决方案。
这是因为Excel一旦打开文件就会内存中的所有数据并且可以非常快速地对其进行操作。为了进行准确的比较,您需要比较在Excel中打开文件所需的时间+删除列,而不是只是删除列。