繁体   English   中英

从CSV文件中删除行并自动生成一个新文件

Remove line(s) from a CSV file and generate a new file automatically

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试使用PHP操作现有的.csv文件! 我查看了大多数StackOverflow问题,并找到了“ Myke Black”用户的答案,该答案最适合我的需求。

我设置$id=2 ,因此我希望代码会影响我的.csv文件中的第2行,并且将生成一个新的生成的不包含第2行的.csv文件。

这是我的代码:

$id=2;
$fptemp = fopen('files/FL_insurance_small-temp.csv', "a+");
if (($handle = fopen('files/FL_insurance_small.csv', "r")) !== FALSE) {
    while (($id= fgetcsv($handle)) !== FALSE) {
        if ($id != $data[0]) {
            $list = array($data);
            fputcsv($fptemp, $list);
        }
    }
    fclose($handle);
    fclose($fptemp);

    rename('files/FL_insurance_small-temp.csv','files/output/FL_insurance_small_new.csv');
    echo "Row with ID: ".$id." successfully deleted!";
} else {
    print "There seems to be a problem.";
}

一切似乎正常,因为在输出文件夹中生成了一个新文件。 我的问题是,新生成的文件为空。 有谁知道为什么? 我想念什么?

示例数据(.csv):

policyID,statecode,county,eq_site_limit,hu_site_limit,fl_site_limit,fr_site_limit,tiv_2011,tiv_2012,eq_site_deductible,hu_site_deductible,fl_site_deductible,fr_site_deductible,point_latitude,point_longitude,line,construction,point_granularity
119736,FL,"CLAY COUNTY",498960,498960,498960,498960,498960,792148.9,0,9979.2,0,0,30.102261,-81.711777,Residential,Masonry,1
448094,FL,"CLAY COUNTY",1322376.3,1322376.3,1322376.3,1322376.3,1322376.3,1438163.57,0,0,0,0,30.063936,-81.707664,Residential,Masonry,3
206893,FL,"CLAY COUNTY",190724.4,190724.4,190724.4,190724.4,190724.4,192476.78,0,0,0,0,30.089579,-81.700455,Residential,Wood,1
333743,FL,"CLAY COUNTY",0,79520.76,0,0,79520.76,86854.48,0,0,0,0,30.063236,-81.707703,Residential,Wood,3
172534,FL,"CLAY COUNTY",0,254281.5,0,254281.5,254281.5,246144.49,0,0,0,0,30.060614,-81.702675,Residential,Wood,1
785275,FL,"CLAY COUNTY",0,515035.62,0,0,515035.62,884419.17,0,0,0,0,30.063236,-81.707703,Residential,Masonry,3
995932,FL,"CLAY COUNTY",0,19260000,0,0,19260000,20610000,0,0,0,0,30.102226,-81.713882,Commercial,"Reinforced Concrete",1
223488,FL,"CLAY COUNTY",328500,328500,328500,328500,328500,348374.25,0,16425,0,0,30.102217,-81.707146,Residential,Wood,1
433512,FL,"CLAY COUNTY",315000,315000,315000,315000,315000,265821.57,0,15750,0,0,30.118774,-81.704613,Residential,Wood,1
142071,FL,"CLAY COUNTY",705600,705600,705600,705600,705600,1010842.56,14112,35280,0,0,30.100628,-81.703751,Residential,Masonry,1
253816,FL,"CLAY COUNTY",831498.3,831498.3,831498.3,831498.3,831498.3,1117791.48,0,0,0,0,30.10216,-81.719444,Residential,Masonry,1
894922,FL,"CLAY COUNTY",0,24059.09,0,0,24059.09,33952.19,0,0,0,0,30.095957,-81.695099,Residential,Wood,1
422834,FL,"CLAY COUNTY",0,48115.94,0,0,48115.94,66755.39,0,0,0,0,30.100073,-81.739822,Residential,Wood,1
582721,FL,"CLAY COUNTY",0,28869.12,0,0,28869.12,42826.99,0,0,0,0,30.09248,-81.725167,Residential,Wood,1
1 个回复

读取文件时-您覆盖的$id是您要查找的行。 相反,您的循环应将值分配给$data

$rowcount = 1;
while ($data= fgetcsv($handle)) {
    if ($id != $rowcount++) {
        fputcsv($fptemp, $data);
    }
}

$rowCount是当前正在读取的行,因此在读取新行时将其与每一行进行比较。

这还将删除对$list的多余分配。

要“删除”(或省略)记录列表...

$id= [2,5,7];
$rowcount = 1;
while ($data= fgetcsv($handle)) {
    if (!in_array($rowcount++, $id)) {   // Only write row if not in the list
        fputcsv($fptemp, $data);
    }
}
1 从CSV文件的字符串列中删除换行符

我有一个包含多个字段的CSV文件。 很少有字段(字符串)的数据跨越多行。 我想将这些多行汇总为一行。 输入数据: 预期产量: SO早先也问过同样的问题。 但是,该解决方案是使用电源外壳实现的。 是否有可能使用python或pandas或pyspark实现相同的功能。 ...

3 从CSV文件中删除新行

我想删除CSV文件字段数据中的新行字符。 SO /其他地方的多个人也会问同样的问题。 但是,提供的解决方案是脚本编写的。 我正在寻找像PYTHON这样的编程语言或Spark中的解决方案(不仅仅是这两个),因为我有很大的文件。 以前就同一主题提出的问题: 从CSV文件的字符串 ...

4 从CSV文件的字符串列中删除换行符Shell脚本[重复]

这个问题已经在这里有了答案: 用空格 5 替换双引号之间的换行符 我的问题和这里提到的完全一样 从CSV文件的字符串列中删除换行符 但是我正在寻找的是shell脚本中的解决方案。 我希望用我的文件中新修改的附加行替换虚线。 这对我来说是必需的,因为c ...

6 从CSV文件中删除行

我有4列的.csv文件。 删除与第一列的id相同的行的最简单方法是什么? 这是我被卡住的地方: 不幸的是,数据库不是一个选择。 ...

8 从文件中删除新行

我正在尝试通过以下命令删除与我提供的详细信息匹配的行。 创建新文件output.txt ,它附带了我不想出现的新行。 有没有一种方法可以在我下面粘贴的同一命令中将其删除。 a.txt具有以下内容: output.txt (预期): output.txt (实际): ...

9 使用 shell 脚本从 CSV 文件中删除空格和新行,并将其保存在相同或不同的文件中

我正在导入一个 CSV 文件并使用 shell 脚本(.sh 文件)将文件中的详细信息保存到数据库中 在 CSV 文件中,一列包含多个图像 URL,并以“|”分隔。 但细节有空格和换行符。 我需要删除相同的内容并在没有换行符的情况下上传数据库中的详细信息。 列中的值如下所示, 我需要它没有空格 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM