【问题标题】:How to delete only one row in CSV with python如何使用python仅删除CSV中的一行
【发布时间】:2019-07-17 22:02:06
【问题描述】:

我正在尝试制作一个将名称列表存储在 CSV 文件中的程序,并且我正在尝试添加一个删除行的函数,该函数不起作用,因为它会删除 CSV 文件中的所有内容。

我尝试过使用 writer.writerow(row),但没有成功。

        memberName = input("Please enter a member's name to be deleted.")
        imp = open('mycsv.csv' , 'rb')
        out = open('mycsv.csv' , 'wb')
        writer = csv.writer(out)
        for row in csv.reader(imp):
            if row == memberName:
                writer.writerow(row)
        imp.close()
        out.close()

我希望程序只删除包含 memberName 的行,但它会删除 CSV 文件中的每一行。如何将其更改为仅删除一行?

【问题讨论】:

    标签: python csv


    【解决方案1】:

    这对我有用:您可以将 csv 文件的内容写入列表,然后在 python 中编辑列表,然后将列表写回 csv 文件。

    lines = list()
    memberName = input("Please enter a member's name to be deleted.")
    with open('mycsv.csv', 'r') as readFile:
        reader = csv.reader(readFile)
        for row in reader:
            lines.append(row)
            for field in row:
                if field == memberName:
                    lines.remove(row)
    
    with open('mycsv.csv', 'w') as writeFile:
        writer = csv.writer(writeFile)
        writer.writerows(lines)
    
    

    【讨论】:

      【解决方案2】:

      读取时不能写入同一个文件。相反,使用另一个文件进行输出,例如:

      import csv
      
      member_name = input("Please enter a member's name to be deleted: ")
      
      with open('in_file.csv') as in_file, open('out_file.csv', 'w') as out_file:
          reader = csv.reader(in_file)
          writer = csv.writer(out_file)
          for row in reader:
              if member_name not in row:  # exclude a specific row
                  writer.writerow(row)
      

      或者,您可以将所需的行存储在内存中,并在重置文件指针后将它们写回输入文件:

      import csv
      
      member_name = input("Please enter a member's name to be deleted: ")
      
      with open('in_file.csv', 'r+') as in_file:
          reader = csv.reader(in_file)
          rows = [row for row in csv.reader(in_file) if member_name not in row]
          in_file.seek(0)
          in_file.truncate()
          writer = csv.writer(in_file)
          writer.writerows(rows)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-29
        • 2013-04-22
        • 1970-01-01
        • 2014-12-29
        • 1970-01-01
        • 2021-08-09
        • 2020-05-11
        相关资源
        最近更新 更多