Добавляются заголовки вместе с новыми данными

Я хочу добавить новые данные в csv файл, но вместе с новыми данными также передаются заголовки('first_name', 'last_name'...). А мне нужно сделать так, чтобы заголовки были в 1 строке и все, а дальше снизу просто данные под этими заголовками.

Код:

import csv

quoting = csv.QUOTE_ALL
def create_csv_file(filename):
    try:
        with open(filename, 'a+', newline='') as f:
            writer = csv.DictWriter(
                f,
                fieldnames=['first_name', 'last_name', 'age', 'city'],
                quoting=quoting
            )
            data1 = input('Имя: ')
            data2 = input('Фамилия: ')
            data3 = input('Возраст: ')
            data4 = input('Место проживания: ')
            writer.writeheader()
            writer.writerow({
                'first_name': data1,
                'last_name': data2,
                'age': data3,
                'city': data4
            })
    except KeyboardInterrupt:
        pass

create_csv_file('database.csv')

csv file:

"first_name","last_name","age","city"
"Ivan ","Ivanov","100","Mars"
"first_name","last_name","age","city"
"1","2","3","4"

Ответы (1 шт):

Автор решения: Johan

Можно сделать так:

import csv
import os.path

quoting = csv.QUOTE_ALL


def create_csv_file(data):
    with open('database.csv', 'a+', newline='') as f:
        writer = csv.DictWriter(f, fieldnames=data, quoting=quoting)
        writer.writeheader()
    user_input()
    return


def user_input()
    try:
        create_csv_file([input('\nИмя: '), input('Фамилия: '), input('Возраст: '), input('Место проживания: ')])
    except KeyboardInterrupt:
        print('\nGood by!')
        exit(0)


def main():
    if not os.path.exists(os.path.join(os.getcwd(), 'database.csv')):
        with open('database.csv', 'w', newline='') as f:
            writer = csv.DictWriter(f, fieldnames=['first_name', 'last_name', 'age', 'city'], quoting=quoting)
            writer.writeheader()
    user_input()


if __name__ == "__main__":
    main()
→ Ссылка