Как я могу изменить значение в определенном столбце определенной строки в python без использования панд?

#python #csv

Вопрос:

Я играл с кодом, предоставленным здесь: https://www.geeksforgeeks.org/update-column-value-of-csv-in-python/ и, похоже, не мог понять, как изменить значение в определенном столбце строки, не вызвав при этом ошибки.

Допустим, я хотел бы изменить статус строки, принадлежащей имени Молли Сингх, как бы я это сделал? Я попробовал следующее ниже только для того, чтобы получить ошибку, и файл CSV оказался пустым. Я также предпочел бы, чтобы решение было без использования pandas tysm.

Например, строка в csv-файле изначально будет иметь регистрационный номер Sno Имя RollNo Статус 1 11913907 Молли Сингх RK19TSA01 P

Каким я хочу видеть результат

Регистрационный номер Sno Имя RollNo Статус 1 11913907 Молли Сингх RK19TSA01 N

Еще один вопрос, если бы я изменил значение в столбце «снег», выполнив сложение/вычитание и т. Д., Как бы я это сделал? Спасибо!

ошибка, которую я получаю, как вы можете видеть, столбец имя изменен на true, затем false и т. Д

 import csv
  
op = open("AllDetails.csv", "r")
dt = csv.DictReader(op)
print(dt)
up_dt = []
for r in dt:
    print(r)
    row = {'Sno': r['Sno'],
           'Registration Number': r['Registration Number'],
           'Name'== "Molly Singh": r['Name'],
           'RollNo': r['RollNo'],
           'Status': 'P'}
    up_dt.append(row)
print(up_dt)
op.close()
op = open("AllDetails.csv", "w", newline='')
headers = ['Sno', 'Registration Number', 'Name', 'RollNo', 'Status']
data = csv.DictWriter(op, delimiter=',', fieldnames=headers)
data.writerow(dict((heads, heads) for heads in headers))
data.writerows(up_dt)
  
op.close()
 

Ответ №1:

Проблемы

  1. Ваша ошибка заключается в том, что имя поля во входном файле написано с ошибкой как Регистрация, а не как регистрация
  • Исправление заключается в том, чтобы просто прочитать имена из входного файла и распространить их в выходной файл, как показано ниже.
  • С другой стороны, вы можете своим кодом:

    заголовки = [‘Sno’, ‘Номер реорганизации’, ‘Имя’, ‘RollNo’, ‘Статус’]

  1. «Еще один вопрос, если бы я изменил значение в столбце снег, выполнив сложение/вычитание и т. Д., Как бы я поступил и в этом случае»
  • Я не совсем понимаю, что под этим подразумевается. В приведенном ниже коде вы просто должны:

    r[‘Sno’] = (некоторое вычислительное значение)

Код

 import csv
  
with open("AllDetails.csv", "r") as op:
    dt = csv.DictReader(op)
    headers = None
    up_dt = []
    for r in dt:
        # get header of input file
        if headers is None:
            headers = r   
        
        # Change status of 'Molly Singh' record
        if r['Name'] == 'Molly Singh':
            r['Status'] = 'N'
    
        up_dt.append(r)
        
with open("AllDetails.csv", "w", newline='') as op:
    # Use headers from input file above
    data = csv.DictWriter(op, delimiter=',', fieldnames=headers)
    data.writerow(dict((heads, heads) for heads in headers))
    data.writerows(up_dt)