【问题标题】:How would you delete a specific row without using panda in Python 3.4.4?在 Python 3.4.4 中不使用 panda 的情况下如何删除特定行?
【发布时间】:2020-01-20 09:39:17
【问题描述】:

我试图找到删除选定行的方法,但我能做到的唯一方法是使用 panda。

我想要做的是删除与 csv 库匹配的整行(错误很好,因为如果该行不存在,我会编写代码),因为我已经围绕所述库开发了代码,我'有人告诉我 'wb' 可以删除行,但我只能删除 2 个单元格(这甚至不起作用)

with open('StudentDetails.csv', 'wb',) as csvfile:
      csvFileWriter = csv.writer(csvfile)
      a = delete_student_entry.get()
      b = delete_password_entry.get()
      csvFileWriter.writerow([a,b])

【问题讨论】:

  • 您可以从原始文件中逐行读取并检查哪一行写入新文件 - 稍后将新文件重命名为旧名称。
  • 这可能不相关,但你能升级你的 Python 版本吗? 3.4 暂时不支持了。
  • mode w delete all from file - 你必须再次写入所有需要保留的行 - 但首先你必须将所有行读入内存
  • @AlexHall 我应该这样做,谢谢提醒。
  • @furas 这实际上是一个非常好的主意...如果我不需要该文件,它是登录系统的一部分。 :(

标签: python excel python-3.x csv python-3.4


【解决方案1】:

你可以用老式的方式来做这件事(如果你想避免使用 pandas)-

with open("StudentDetails.csv", "r") as f:
    lines = f.readlines()
with open("StudentDetails.csv", "w") as f:
    for line in lines:
        if line.strip("\n") != "YOUR ROW HERE":
            f.write(line)

这将在删除您要避免的行时覆盖文件。

如果您真的想使用csv 库,您可以执行以下操作 -

import csv

with open('StudentDetails.csv', newline='') as csvfile:
     csvreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
     output = [x for x in csvreader if x != [YOUR LINE HERE AS A STRING]]

with open('StudentDetails.csv', 'w', newline='') as csvfile:
    csvreader = csv.writer(csvfile, delimiter=' ',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
    for x in output:
        csvreader.writerow(x)

【讨论】:

    猜你喜欢
    • 2013-03-24
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多