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

Sam*_*mBG 20 python csv python-3.x

解决这个主题的某些形式存在多个SO问题,但是从csv文件中仅删除一行(通常它们涉及复制整个文件)它们似乎都非常低效.如果我的csv格式如下:

fname,lname,age,sex
John,Doe,28,m
Sarah,Smith,27,f
Xavier,Moore,19,m
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ica 27

你有一个根本问题.没有当前的文件系统(我知道)提供了从文件中间删除一堆字节的工具.您可以覆盖现有字节,也可以写入新文件.所以,你的选择是:

  • 创建没有违规行的文件副本,删除旧文件,并重新命名新文件.(这是您要避免的选项).
  • 使用将被忽略的内容覆盖该行的字节.根据准确读取文件的内容,注释字符可能有效,或者空格可能有效(或甚至可能\0).如果您想要完全通用,则这不是CSV文件的选项,因为没有已定义的注释字符.
  • 作为最后的绝望措施,您可以:
    • 读取您要删除的行
    • 将剩余的文件读入内存
    • 并用您要保留的数据覆盖该行和所有后续行.
    • 截断文件作为最终位置(文件系统通常允许这样).

如果你试图删除第一行,最后一个选项显然没有多大帮助(但如果你想删除末尾附近的一行,它会很方便).它也非常容易在流程中间崩溃.

  • @SamBG崩溃不会*倾向*,但如果它在写入期间崩溃(例如因为断电),结果将是灾难性的.是的,这是kabanus正在使用的方法. (2认同)