从csv中删除一行而不复制文件
有多个SO问题解决了该主题的某种形式,但它们似乎都无法从csv文件" title="csv文件">csv文件中仅删除一行(通常涉及复制整个文件),效率非常低下。如果我的csv格式如下:
fname,lname,age,sexJohn,Doe,28,m
Sarah,Smith,27,f
Xavier,Moore,19,m
删除Sarah的行的最有效方法是什么?如果可能,我要避免复制整个文件。
回答:
您这里有一个基本问题。当前的文件系统(据我所知)没有提供一种从文件中间删除一堆字节的功能。您可以覆盖现有字节,或写入新文件。因此,您的选择是:
- 创建该文件的副本(不包含违规行),删除旧的副本,并在适当位置重命名新文件。(这是您要避免的选项)。
- 用将被忽略的内容覆盖该行的字节。根据 确切 地读取文件的内容,注释字符可能起作用,或者空格可能起作用(甚至可能是
\0
)。但是,如果要完全通用,则CSV文件不建议使用此选项,因为没有定义的注释字符。 - 作为最后的绝望措施,您可以:
- 阅读您要删除的行
- 将文件的其余部分读入内存
- 并用您要保留的数据覆盖该行和所有后续行。
- 将文件截断为最终位置(文件系统通常允许这样做)。
如果您要删除第一行,最后一个选项显然无济于事(但如果您想删除末尾的行,这很方便)。它还非常容易在过程中崩溃。
以上是 从csv中删除一行而不复制文件 的全部内容, 来源链接: utcz.com/qa/410601.html