代码之家  ›  专栏  ›  技术社区  ›  wfgeo

从CSV writer写入的文件中删除最后一行(和空白)

  •  0
  • wfgeo  · 技术社区  · 7 年前

    我有一个CSV文件是由CSV编写器编写的。文件末尾有一个空行需要删除。我似乎无法摆脱它,我的搜索结果被淹没的人问为什么有一个空白行之间的每一行数据(这当然是解决了添加) newline=""

    有没有办法干净利落地做到这一点?代码如下:

    with open(r"file.csv", "w", newline="") as f:
        csv_writer = writer(f, delimiter=";")
        for i in range(5):
            csv_writer.writerow([i, uniform(0,500)])
    

    这就是输出(实际上,将最后一行置空不会显示在markdown中,似乎:

    0;479.9182863880229
    1;397.35174552864135
    2;390.33911360875913
    3;243.78955947710557
    4;171.04998742391697
    <empty line here>
    

    我不喜欢这个解决方案,它和 the responses to this question :

    lines = file.readlines()
    lines = lines[:-1]
    

    因为它需要我再次读取整个文件,我希望这个文件可能会增长到一个非常大的大小,这个特定的代码块可能会被多次执行。

    1 回复  |  直到 7 年前
        1
  •  1
  •   wfgeo    7 年前

    我终于找到了一个可行的解决方案,不需要再次读取整个文件:

    with open(r"file.csv", "w", newline="") as f:
        csv_writer = writer(f, delimiter=";")
        for i in range(5):
            csv_writer.writerow([i, uniform(0, 500)])
    
    f.seek(0, os.SEEK_END)
    f.seek(f.tell()-2, os.SEEK_SET)
    f.truncate()