Как удалить указанную строку c из файла csv, используя python - PullRequest
1 голос
/ 05 августа 2020

Я работаю над одной программой и пытаюсь достичь следующих функций.

  • добавить нового ученика
  • Удалить ученика на основе идентификатора

вот мой код

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()

функция добавления работает правильно, но когда я попытался удалить функцию, она удаляет все существующие записи. Кто-нибудь, пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Вам следует использовать временный файл вместо одновременного открытия и записи в один и тот же файл. Оформить заказ на этот ответ: { ссылка }

0 голосов
/ 05 августа 2020

Сначала я покажу код, а ниже оставлю несколько комментариев об изменениях.

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 вместо a binary one.
  2. Я изменил имя переменной id на ìdt, потому что id встроен для возврата идентичности объекта, и это не очень хорошая практика перезаписывать встроенные в функциях.
  3. Чтобы удалить только строки со спецификацией c idt, вы должны прочитать весь файл, сохранить в var (list), удалить то, что вы хотите удалить, и только после этого сохранить результат .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...