处理csv的最快方法,bash与php与c/c++的处理速度



我有一个有5M行的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

在python上我做

with open("file.csv", "r") as ins:
array = []
for line in ins:
//process line here

一条糟糕的线路就像

name@baddomain.com
name@domain (without extension)

等等。我有一些关于什么是糟糕的台词的标准,这就是为什么我没有把它贴在这里。

然而,对于非常大的文件,我必须设法找到一个更好的解决方案。你们推荐什么?我应该学习如何在c/c++或bash中实现它吗。Bash我已经知道一点了,所以我可以更快。在这种情况下,c++是否比bash快得多?还是我应该坚持bash?

谢谢

对于PHP解决方案,您正在寻找fgetcsv。本手册包括迭代CSV文件的示例。

或者,如果你想变得漂亮,你可以使用联赛.csv库。

最新更新