Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理csv的最快方式,bash vs php vs c/c++处理速度_Php_Python_C++_C_Bash - Fatal编程技术网

处理csv的最快方式,bash vs php vs c/c++处理速度

处理csv的最快方式,bash vs php vs c/c++处理速度,php,python,c++,c,bash,Php,Python,C++,C,Bash,我有一个5百万行的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 } 所以我循环表

我有一个5百万行的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
一条糟糕的线路就像

name@baddomain.com
name@domain (without extension)
等等,我有一些关于什么是糟糕的线条的标准,这就是为什么我没有麻烦把它贴在这里

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


谢谢

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


或者,如果您想变得更有趣,可以使用library。

»如果当前行包含特定的坏字符串«。最佳解决方案取决于坏字符串到底是什么。如果一个简单的正则表达式可以识别坏字符串,我将在bash或任何其他shell中使用一个grep调用。请在删除坏行之前和之后发布一个小的示例文件,而不是将所有行读取到内存中,考虑在C++代码中逐行处理文件。因为你没有发布任何相关的代码,让我推荐Perl:Perl -MTEX::CSVXX= CSV -E“打开我的$FH,”'CyIon,我提到我不知道C++。如果我必须学习它来完成这项任务,如果它的速度值得,我会一次读一行,而不是一个大峡谷中的整个文件你的bash脚本你正在为每一行创建一个新的sed子进程-我不认为这有什么必要。它肯定会给性能带来冲击。请记住,bash支持正则表达式,而且通常不需要外部sed语言。C或C++可以提高性能,但是没有测量性能瓶颈的地方是没有保证的。使用类似strace的东西。一般来说,C或C++必须写得好,编写代码太容易,产生比它解决的问题更多的麻烦。谢谢FGSCV,谢谢!
name@baddomain.com
name@domain (without extension)