从csv中删除一行而不复制文件

有多个SO问题解决了该主题的某种形式,但它们似乎都无法从csv文件" title="csv文件">csv文件中仅删除一行(通常涉及复制整个文件),效率非常低下。如果我的csv格式如下:

fname,lname,age,sex

John,Doe,28,m

Sarah,Smith,27,f

Xavier,Moore,19,m

删除Sarah的行的最有效方法是什么?如果可能,我要避免复制整个文件。

回答:

您这里有一个基本问题。当前的文件系统(据我所知)没有提供一种从文件中间删除一堆字节的功能。您可以覆盖现有字节,或写入新文件。因此,您的选择是:

  • 创建该文件的副本(不包含违规行),删除旧的副本,并在适当位置重命名新文件。(这是您要避免的选项)。
  • 用将被忽略的内容覆盖该行的字节。根据 确切 地读取文件的内容,注释字符可能起作用,或者空格可能起作用(甚至可能是\0)。但是,如果要完全通用,则CSV文件不建议使用此选项,因为没有定义的注释字符。
  • 作为最后的绝望措施,您可以:

    • 阅读您要删除的行
    • 将文件的其余部分读入内存
    • 并用您要保留的数据覆盖该行和所有后续行。
    • 将文件截断为最终位置(文件系统通常允许这样做)。

如果您要删除第一行,最后一个选项显然无济于事(但如果您想删除末尾的行,这很方便)。它还非常容易在过程中崩溃。

以上是 从csv中删除一行而不复制文件 的全部内容, 来源链接: utcz.com/qa/410601.html

回到顶部