读取多个CSV文件 [英] reading off multiple CSV files

查看:103
本文介绍了读取多个CSV文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

需要提取大量信息,即

文件1:

 10948|Book|Type1

文件2:

SHA512||0||10948

文件3:

0|10948|SHA512|c3884fbd7fc122b5273262b7a0398e63

我想像这样舒缓

 c3884fbd7fc122b5273262b7a0398e63|SHA512|Type1|Book

我无权访问实际的数据库,有什么办法可以做到这一点?基本上,寻找$id = $file1[0]; if($file3[1] == $id)或一些叔叔那里的东西效率更高.

每个CSV文件的行数为10万至30万行.我不在乎是否需要一段时间,我可以让它在EC2上运行一段时间.

解决方案

$data = array();

$fh = fopen('file1') or die("Unable to open file1");
while(list($id, $val1, $val2) = fgetcsv($fh, 0, '|')) {
   $data[$id]['val1'] = $val1;
   $data[$id]['val2'] = $val2;
}
fclose($fh);

$fh = fopen('file2') or die ("Unable to open file2");
while(list($method, null, null, null, $id) = fgetcsv($fh, 0, '|')) {
   $data[$id]['method'] = $method;
}
fclose($fh);

$fh = fopen('file3') or die("Unable to open file3");
while(list(null, $id, null, $hash) = fgetcsv($fh, 0, '|')) {
   $data[$id]['hash'] = $hash;
}
fclose($fh);

乏味,但是您是否应该获得包含所需数据的数组.将其作为另一个csv输出作为练习留给读者(提示:请参见 fputcsv() ).

need to pull a ton of info, i.e.

file1:

 10948|Book|Type1

file2:

SHA512||0||10948

file3:

0|10948|SHA512|c3884fbd7fc122b5273262b7a0398e63

I'd like to get it into soething like

 c3884fbd7fc122b5273262b7a0398e63|SHA512|Type1|Book

I do not have access to an actual database, is there any way to do this? Basically looking for a $id = $file1[0]; if($file3[1] == $id) or something unles sthere's more efficient.

Each CSV file is anywhere from 100k-300k lines. I don't care if it takes a while, I can just let it run on EC2 for a while.

解决方案

$data = array();

$fh = fopen('file1') or die("Unable to open file1");
while(list($id, $val1, $val2) = fgetcsv($fh, 0, '|')) {
   $data[$id]['val1'] = $val1;
   $data[$id]['val2'] = $val2;
}
fclose($fh);

$fh = fopen('file2') or die ("Unable to open file2");
while(list($method, null, null, null, $id) = fgetcsv($fh, 0, '|')) {
   $data[$id]['method'] = $method;
}
fclose($fh);

$fh = fopen('file3') or die("Unable to open file3");
while(list(null, $id, null, $hash) = fgetcsv($fh, 0, '|')) {
   $data[$id]['hash'] = $hash;
}
fclose($fh);

Tedious, but should you get an array with the data you want. Outputting it it as another csv is left as an exercise to the reader (hint: see fputcsv()).

这篇关于读取多个CSV文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆