首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用PHP合并两个大型CSV文件

用PHP合并两个大型CSV文件
EN

Stack Overflow用户
提问于 2011-01-20 05:26:23
回答 5查看 3.4K关注 0票数 3

我想用PHP合并两个大的CSV文件。这些文件太大了,甚至无法一次全部放入内存。在伪代码中,我可以想到这样的东西:

代码语言:javascript
运行
复制
for i in file1
  file3.write(file1.line(i) + ',' + file2.line(i))
end

但是,当我使用fgetcsv遍历文件时,如果不先将整个文件加载到内存中,就不太清楚如何从某个文件中获取n行。

有什么想法吗?

编辑:我忘了提到,这两个文件中的每个文件都有相同的行数,并且它们具有一对一的关系。也就是说,file1中的62,324行与file2中的62,324行相同。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-20 05:44:37

我不确定您使用的是什么操作系统,但是如果您使用的是Linux,那么使用paste命令可能比尝试在PHP中执行此操作容易得多。

如果这是一个可行的解决方案,并且您完全不需要在PHP中执行此操作,则可以尝试以下操作:

代码语言:javascript
运行
复制
paste -d ',' file1 file2 > combined_file
票数 4
EN

Stack Overflow用户

发布于 2011-01-20 05:38:30

看一下fgets函数。您可以读取每个文件的一行,对其进行处理,然后将其写入新文件,然后转到下一行,直到到达文件的末尾。

PHP: fgets

具体来看手册中标题为PHP #1逐行读取文件的示例。注意fgets函数的返回值也很重要。

返回从handle指向的文件中读取的最大长度为1字节的字符串。如果在文件指针中没有要读取的数据,则返回FALSE

因此,如果它没有返回、FALSE、,那么您就知道还有更多的行要处理。

票数 3
EN

Stack Overflow用户

发布于 2011-01-20 05:39:55

您可以使用fgets()

代码语言:javascript
运行
复制
$file1 = fopen('file1.txt', 'r');
$file2 = fopen('file2.txt', 'r');
$merged = fopen('merged.txt', 'w');

while (
    ($line1 = fgets($file1)) !== false
    && ($line2 = fgets($file2)) !== false) {

    fwrite($merged, $line1 . ',' . $line2);
}

fgets()从文件中读取一行。如您所见,这段代码同时在两个文件上使用它,将合并后的行写到第三个文件。这里的手册是:

http://php.net/fgets

http://php.net/fopen

http://php.net/fwrite

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4740957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档