#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:
Проблемы
- Ваша ошибка заключается в том, что имя поля во входном файле написано с ошибкой как Регистрация, а не как регистрация
- Исправление заключается в том, чтобы просто прочитать имена из входного файла и распространить их в выходной файл, как показано ниже.
- С другой стороны, вы можете своим кодом:
заголовки = [‘Sno’, ‘Номер реорганизации’, ‘Имя’, ‘RollNo’, ‘Статус’]
- «Еще один вопрос, если бы я изменил значение в столбце снег, выполнив сложение/вычитание и т. Д., Как бы я поступил и в этом случае»
- Я не совсем понимаю, что под этим подразумевается. В приведенном ниже коде вы просто должны:
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)