删除CSV中的整个特定行

时间:2019-03-20 15:49:59

标签: python csv

初始化文件如下:

1;2019-03-20 22:43:00.934775;200;3;60;0.05;0.05;20_File_18289094.csv;2;
2;2019-03-20 22:46:42.582782;200;3;60;0.05;0.05;21_File_16565692.csv;2;
3;2019-03-20 22:46:52.971144;200;3;60;0.05;0.05;22_File_22368393.csv;

我想读取和删除同一文件的特定行,我的目标是找到一行的第一列,然后将其完全删除。到目前为止,这是我的代码,但只是将;替换为,

1,2019-03-20 22:43:00.934775,200,3,60,0.05,0.05,20_File_18289094.csv,2,
2,2019-03-20 22:46:42.582782,200,3,60,0.05,0.05,21_File_16565692.csv,2,
3,2019-03-20 22:46:52.971144,200,3,60,0.05,0.05,22_File_22368393.csv,2,



with open(file_master) as inf:
    reader = csv.reader(inf.readlines(), delimiter=';')

with open(file_master, 'w') as outf:
    writer = csv.writer(outf)
    for line in reader:
        if str(line[0]) == '1':
            writer.writerow(line)
            break
        else:
            writer.writerow(line)
    writer.writerows(reader)

1 个答案:

答案 0 :(得分:1)

这完成了工作。

使用r+标志打开文件,该文件允许进行读取和写入。

outdata是您的帖子“清理”内容的占位符列表。

在这种情况下,通过循环检查第一个值是否与"1"相匹配,否则将其添加到将要写出的日期。

seek将您带回到文件的开头(否则您将获得类似行为的追加)。

编写您的清理内容。

truncate删除之前尚未写入的数据(否则,您将获得第2、3、3行)。

with open("file_master", 'r+') as outf:
    outdata = []
    for line in outf.read().split("\n"):
        line_items = line.split(";")
        if line_items[0] == "1":
            pass
        else:
            outdata.append(",".join(line_items))
    outf.seek(0)
    outf.write("\n".join(outdata))
    outf.truncate()