当前位置: 首页 > 面试题库 >

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

黎奇思
2023-03-14
问题内容

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

fname,lname,age,sex
John,Doe,28,m
Sarah,Smith,27,f
Xavier,Moore,19,m

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


问题答案:

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

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

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



 类似资料:
  • 我一直在使用pandas导入CSV,但每次尝试使用它时,我都会得到一个随机的额外行,这会导致代码中的错误。我如何完全抹去这一行? 我用来导入它的代码是:import itertools import copy import networkx as nx import pandas as pd import Matplotlib.pyplot as plt import csv 我的表是一个简单的I

  • 问题内容: 目标 我已经从hotmail下载了CSV文件,但其中有很多重复项。这些重复项是完整的副本,我不知道为什么我的手机会创建它们。 我想摆脱重复。 方法 编写python脚本以删除重复项。 技术指标 问题答案: 更新:2016 如果您乐于使用有用的外部库: @IcyFlame解决方案的更有效版本 要就地编辑同一文件,您可以使用此

  • 问题内容: 我有一个大文件,只需要删除几行,是否有任何方法可以打开新文件并复制整个文本? 编辑:主要问题是,当它在多个txt filse中运行时,该程序失败 问题答案: 有什么方法可以做到而无需打开新文件并复制整个文本? 不,没有。当然,如果您想 安全地 做的话就没有。 而且也不会真正帮助您。它可以让您用相等数量的字节替换文件中的字节序列,但这并不意味着删除一行。 您可以这样使用RAF: 给定初始

  • 请注意,在转向您之前,我已经浏览了各种帖子。事实上,我尝试实现中提供的解决方案:基于“notin”条件从数据帧中删除行 我的问题如下。让我们假设我有一个巨大的数据帧,我想删除重复的数据帧。我很清楚我可以使用drop_duplicates,因为这是最快的最简单的方法。然而,我们的老师希望我们创建一个包含重复项ID的列表,然后根据这些值是否包含在上述列表中删除它们。 现在,让我们看看输出: 因此,我得

  • 问题内容: 我正在尝试删除包含特定字符串的特定行。 我有一个名为 numbers.txt 的文件,其内容如下: Peter· Tom TOM1 Inflammation 我要删除的是文件中的那个 tom ,所以我做了以下功能: 输出为: 彼得· 颜 如您所见,问题在于该函数删除了 tom 和 tom1 ,但是我不想删除 tom1 。我只想删除 tom 。这是我想要的输出: 彼得 TOM1 燕 有什

  • 问题内容: 我尝试在Java中删除csv文件中的列。 例如,我有这个csv文件 我想要下一个操作后:(删除csvFile,2)将是: 我发现只有调用行而不是列的操作。 问题答案: 删除CSV文件中一列的唯一方法是删除整个文件(即文件的每一行)的标题和该列的信息。即使您使用第三方库,它也会在内部进行。