簡體   English   中英

如何使用 python 從 csv 文件中刪除特定行

[英]How to remove specifc row from csv file using python

我正在開發一個程序並嘗試實現以下功能。

  • 添加新學生
  • 根據 id 刪除學生

這是我的代碼

from csv import writer
import csv

def add(file_name, list_of_elem):
    # Open file in append mode
    with open(file_name, 'a+', newline='') as write_obj:
        # Create a writer object from csv module
        csv_writer = writer(write_obj)
        # Add contents of list as last row in the csv file
        csv_writer.writerow(list_of_elem)

def remove():
    id = input("Enter ID : ")
    with open('students.csv', 'rb') as inp, open('students.csv', 'wb') as out:
        writer = csv.writer(out)
        for row in csv.reader(inp):
            if row[0] != id:
                writer.writerow(row)


# List of strings
row_contents = [11,'mayur','Java','Tokyo','Morning']
# Append a list as new line to an old csv file
add('students.csv', row_contents)
remove()

添加 function 工作正常,但是當我嘗試刪除 function 時,它會刪除所有現有條目。任何人都可以幫助我。

首先我將展示代碼,然后我將在下面留下一些關於更改的評論。

from csv import writer
import csv

def add(file_name, list_of_elem):
    # Open file in append mode
    with open(file_name, 'a+', newline = '') as write_obj:
        # Create a writer object from csv module
        csv_writer = writer(write_obj)
        # Add contents of list as last row in the csv file
        csv_writer.writerow(list_of_elem)

def remove():
    idt = input("Enter ID : ")
    with open('students.csv', 'r') as inp:
        newrows = []
        data = csv.reader(inp)
        for row in data:
            if row[0] != idt:
                newrows.append(row)
    with open('students.csv', 'w') as out:
        csv_writer = writer(out)
        for row in newrows:
            csv_writer.writerow(row)

def display():
    with open('students.csv','r') as f:
        data = csv.reader(f)
        for row in data:
                print(row)

# List of strings
row_contents = [10,'mayur','Java','Tokyo','Morning']
add('students.csv', row_contents)
row_contents = [11,'mayur','Java','Tokyo','Morning']
add('students.csv', row_contents)
row_contents = [12,'mayur','Java','Tokyo','Morning']
add('students.csv', row_contents)
# Append a list as new line to an old csv file

display()
remove()
  1. 如果您的文件是 CSV,您應該使用text文件,而不是binary
  2. 我將變量id的名稱更改為ìdt因為id是內置的以返回 object 的標識,並且覆蓋內置函數不是一個好習慣。
  3. 要僅刪除具有特定idt的行,您應該讀取所有文件,存儲到 var(列表)中,刪除要刪除的內容,然后才保存結果。

您應該使用臨時文件,而不是同時打開和寫入同一個文件。 查看此答案: https://stackoverflow.com/a/17646958/14039323

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM