向 CSV 文件添加新行

Posted

技术标签:

【中文标题】向 CSV 文件添加新行【英文标题】:Add a new line to a CSV file 【发布时间】:2012-07-09 02:18:33 【问题描述】:

如果我在服务器上保存了一个 CSV,我如何使用 php 编写给定的行,比如在它的底部写 142,fred,elephants

【问题讨论】:

这就是所谓的appending 看文件打开时的模式,经常有open 用于追加文件系统函数。 【参考方案1】:

打开 CSV 文件进行附加 (fopen­Docs):

$handle = fopen("test.csv", "a");

然后添加您的线路 (fputcsv­Docs):

fputcsv($handle, $line); # $line is an array of strings (array|string[])

然后关闭句柄(fclose­Docs):

fclose($handle);

【讨论】:

@fvu:不是真的。 + 不是必需的,如果文件不存在,a 也会单独创建文件。 + 用于阅读支持。见"'a' 只写打开;将文件指针放在文件末尾。如果文件不存在,请尝试创建它。" de.php.net/manual/en/function.fopen.php @Dale:不是那个意思。添加了一个更琐碎的最后一句话,不能那么容易读错。不要在这里伤害任何人的感情。 如果您包含 $line 需要是一个字符串数组,而不是实际的行本身,将会有所帮助。 @Overcode:对于行本身,请使用fputs / fwrite - 如果您想写入一条记录,请使用换行符 ("\n") 终止它,因为该字符通常用于分隔 UNIX 文本文件中的记录。跨度> 【参考方案2】:

您可以为文件使用面向对象的接口类 - SplFileObject http://php.net/manual/en/splfileobject.fputcsv.php (PHP 5 >= 5.4.0)

$file = new SplFileObject('file.csv', 'a');
$file->fputcsv(array('aaa', 'bbb', 'ccc', 'dddd'));
$file = null;

【讨论】:

【参考方案3】:

这个解决方案对我有用:

<?php
$list = array
(
'Peter,Griffin,Oslo,Norway',
'Glenn,Quagmire,Oslo,Norway',
);

$file = fopen('contacts.csv','a');  // 'a' for append to file - created if doesn't exit

foreach ($list as $line)
  
  fputcsv($file,explode(',',$line));
  

fclose($file); 
?>

参考:https://www.w3schools.com/php/func_filesystem_fputcsv.asp

【讨论】:

【参考方案4】:

如果您希望每个拆分文件保留原始文件的标题;这是hakre答案的修改版本:

$inputFile = './users.csv'; // the source file to split
$outputFile = 'users_split';  // this will be appended with a number and .csv e.g. users_split1.csv

$splitSize = 10; // how many rows per split file you want 

$in = fopen($inputFile, 'r');
$headers = fgets($in); // get the headers of the original file for insert into split files 
// No need to touch below this line.. 
    $rowCount = 0; 
    $fileCount = 1;
    while (!feof($in)) 
        if (($rowCount % $splitSize) == 0) 
            if ($rowCount > 0) 
                fclose($out);
            
            $out = fopen($outputFile . $fileCount++ . '.csv', 'w');
            fputcsv($out, explode(',', $headers));
        
        $data = fgetcsv($in);
        if ($data)
            fputcsv($out, $data);
        $rowCount++;
    

    fclose($out);

【讨论】:

以上是关于向 CSV 文件添加新行的主要内容,如果未能解决你的问题,请参考以下文章

在python的csv文件中添加新行输出

如何在nodejs json2csv中的现有csv文件中追加新行?

在 python3 中的 csv 文件的特定行之后添加新行

在追加模式下使用 to_csv 时,python pandas 新行附加到 csv 中的最后一行

如何在现有 csv 文件中写入新行而不将其附加到最后一行?

bash 中的 awk 命令:如何停止添加新行?