Ваш код практически правильный. Однако есть несколько изменений, которые нужно внести:
1. После определения объекта DictWriter, вам следует вызвать метод `.writeheader()`, чтобы записать заголовки полей в файл:
```python
with open('directory.csv', 'r+', encoding='utf-8', newline="") as f:
reader = csv.DictReader(f)
fieldnames = ['Имя', 'Фамилия', 'Отчество', 'Организация', 'Рабочий телефон', 'Личный телефон']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
```
2. После того, как вы изменяете значения строки, добавьте только ту строку в список `entries`, которую вы изменили. Это позволит вам сохранять только измененные строки:
```python
for row in reader:
if row["Имя"] == name and row["Фамилия"] == last_name and row["Отчество"] == surname:
# ваш код
else:
entries.append(row)
```
3. Наконец, после записи измененных данных в файл, добавьте вызов метода `.truncate()`, чтобы удалить исходное содержимое файла:
```python
f.seek(0)
writer.writeheader()
writer.writerows(entries)
f.truncate()
```
После этих изменений ваш код будет выглядеть примерно так:
```python
import csv
def update_entry():
name = input('Введите имя, чьи данные вы хотите изменить: ')
last_name = input('Введите фамилию, чьи данные вы хотите изменить: ')
surname = input('Введите отчество, чьи данные вы хотите изменить: ')
with open('directory.csv', 'r+', encoding='utf-8', newline="") as f:
reader = csv.DictReader(f)
fieldnames = ['Имя', 'Фамилия', 'Отчество', 'Организация', 'Рабочий телефон', 'Личный телефон']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
entries = []
for row in reader:
if row["Имя"] == name and row["Фамилия"] == last_name and row["Отчество"] == surname:
# ваш код
else:
entries.append(row)
f.seek(0)
writer.writeheader()
writer.writerows(entries)
f.truncate()
```
Надеюсь, что это поможет вам в решении вашей задачи!