gpt4 book ai didi

php - 如何处理大型 CSV 文件以插入到 mysql 中

转载 作者:行者123 更新时间:2023-11-29 06:54:31 24 4
gpt4 key购买 nike

我现在正在解析一个 csv 文件(生成为 .txt),但该文件未压缩时大约有 350mb。压缩后,它在 zip 文件中显示为 23mb。当我尝试解析 350mb 的文件时,我的系统完全死机了。我将这些行存储在这样的数组中。第一行是标题。

$fh = fopen($inputFile, 'r');
$contents = fread($fh, filesize($inputFile)); // 5KB
fclose($fh);
//$contents = str_replace('"','',$contents);

$fileLines = explode("\n", $contents); // explode to make sure we are only using the first line.

然后我遍历每一行,将其循环插入到 mySQL 中。由于该文件大约有 350mb,是否有一种方法可以从 .zip 文件中解析它,例如 .zip_filename.txt 或者这甚至会有所不同吗?

文件太大,无法通过import方式直接插入到mysql中。

最佳答案

使用内置函数 fgetcsv :

<?php
$row = 1;
if (($handle = fopen($inputFile, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
?>

如果可能,也使用多插入。而不是运行多个查询:

insert into table (col1, col2) values("row1-col1", "row1-col2");
insert into table (col1, col2) values("row2-col1", "row2-col2");

像这样构建一个查询要快得多:

insert into table (col1, col2) 
values ("row1-col1", "row1-col2"),
("row2-col1", "row2-col2");

对了,你也可以load a file directly into mysql :

load data local infile 'file.csv' into table table_name fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(col1, col2)

关于php - 如何处理大型 CSV 文件以插入到 mysql 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13553875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com