【问题标题】:How to delete a row of CSV file using csv reader in Python?如何在 Python 中使用 csv 阅读器删除一行 CSV 文件?
【发布时间】:2011-03-09 09:35:13
【问题描述】:

我想处理 csv 文件的每一行并存储到数据库中。存储该行后,我想删除 csv 文件中的该行。我已经编写了用于获取和存储行的代码。但我一直在删除 csv 文件中的一行。

我的代码:

import csv
  entries = csv.reader(open('/opt/workspace/jup/juppro/media/docs/phonebook.csv', 'rb'), dialect='excel-tab')
  entries_list = []
  entries_list.extend(entries)
  total_records= len(entries_list)
  uploaded_records=0
  for data in entries_list:
      uploaded_records=uploaded_records+1
      cols = data[0].replace('"','')
      cols1= cols.split(';')
      contact = phonebook()
      contact.email = cols1[0]
      contact.firstname = cols1[1]
      contact.lastname = cols1[2]
      contact.phoneno = cols1[3]
      #names.append(data[0])
      contact.save()

【问题讨论】:

  • 如果你处理每一行然后删除每一行,最后就不会再有csv文件了。那么,为什么要一个接一个地删除每一行,而不是在完全处理完文件后删除整个文件呢?
  • @eyquem:实际上我想知道每次将整个 csv 行存储到数据库中的进度。为此,我计划做的是调用一个函数,该函数一次将 1 行存储到数据库,从 csv 中删除该行,然后增加计数。然后我可以通过 rowsstored*100/totalrows 找到进度。
  • 您的目的只是为了了解治疗的进展情况?我建议您在文档中查看函数 enumerate() 。文件是否会被完全处理?
  • “删除文件中的一行或一行”并不意味着任何具体的事情。删除不能通过删除硬盘中的大块位来完成。删除的效果必须通过受控重写来获得

标签: python django csv


【解决方案1】:
  1. 将 CSV 读入内存,例如一个列表。
  2. 将相关行保存到数据库并从列表中删除。
  3. 将列表中剩余的行保存回 CSV 文件。

【讨论】:

  • @mdm 感谢您的回答...但是该 csv 文件有超过 500000 条记录。将其存储在列表中是否正确
  • 在这种情况下,也许不是。您可以在读取原始文件时写入新的 CSV 文件(写入那些您不想删除的行),这样就无需将其存储在内存中。
  • @mdm 实际上我的问题是...... ajax 函数将调用 python 方法。该python方法将存储csv的第一行并删除该行...我将重复调用此ajax函数...
  • 这是某种导入吗?为什么不能一次性为 CSV 中的所有行运行例程?
  • @mdm。这不是导入。目标是将 csv 上传到数据库并显示进度。
【解决方案2】:

我向你推荐这个代码

import csv
from os.path import getsize
from itertools import islice

print 'size of file :',getsize('/opt/workspace/jup/juppro/media/docs/phonebook.csv')

entries = csv.reader(open('/opt/workspace/jup/juppro/media/docs/phonebook.csv', 'rb'), dialect='excel-tab')

n = 3
cnt = 0
chunk = True
while chunk:
    chunk = list(islice(entries,n))
    if chunk==[]: 
        print 'processing ended'
        break
    # here: all the treatments of the rows being in chunk
    cnt += n
    print cnt

如果所有文件都被处理,你不需要在处理时删除行:你将在处理后删除文件。

如果你想根据精确的条件删除一些行,说出来,我们会修改上面的代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多