我有500万行的CSV。我有一个选项可以在MySQL数据库导入,然后循环表用PHP。
db_class=new MysqlDb;
$db_class->ConnectDB();
$query="SELECT * FROM mails WHERE .....";
$result=mysqli_query(MysqlDb::$db, $query);
while($arr=mysqli_fetch_array($result))
{
//db row here
}
所以我所有环路从表中的邮件,并处理它们。如果它们包含一些不好的字符串,我将它们删除等。
这工作,但就是导入5M行很慢,也逐个循环他们都非常缓慢,编辑行(删除当它们包含错误的字符串)。
我跳过的PHP / MySQL在所有想一个更好的解决方案。我将线加工的.csv文件,线,检查当前行包含特定错误的字符串。我能做到这一点在纯PHP,如:
$file = file('file.csv');
while (($data = fgetcsv($file)) !== FALSE) {
//process line
$data[0];
}
这是bash脚本我用循环文件的所有行
while read line; do
sed -i '/badstring/d' ./clean.csv
done < bac.csv
虽然在蟒蛇怎么办
with open("file.csv", "r") as ins:
array = []
for line in ins:
//process line here
坏线会像
[email protected]
name@domain (without extension)
等我有一个坏的线是哪几个指标分析,这就是为什么我没有打扰在这里张贴。
然而,对于非常大的文件,我必须寻求更好的解决方案。你们有什么建议?我应该学会如何做到这一点的C / C ++或bash。猛砸我知道一点点了,所以我可以使其更快。是C / +++比bash的这种情况要快得多?或者我应该使用bash坚持?
谢谢
至于PHP的解决方案,您正在寻找fgetcsv。该手册包括迭代CSV文件的例子。
或者,如果你想成为幻想,你可以用league/csv图书馆去。