Это не ясно, что ваш вопрос, поэтому я должен угадать. Если вы хотите получить более конкретный ответ, вместо неясных обобщений, вам нужно будет написать более конкретный вопрос.
Я подозреваю, что у вас есть код вроде этого:
with open('output.csv', 'w') as f:
dw = csv.DictWriter(f, ('name', 'age', 'tel'))
dw.writeheader()
dw.writerow(dict1)
with open('output.csv', 'a') as f:
dw = csv.DictWriter(f, ('name', 'age', 'tel'))
dw.writeheader()
dw.writerow(dict2)
И проблема в том, что ваш результат выглядит следующим образом:
name,age,tel
Leo,15,123456789
name,age,tel
Zac,20,987654321
Когда вы хотите это:
name,age,tel
Leo,15,123456789
Zac,20,987654321
Если это так, правильный способ решить это - просто не звонить writeheader
во второй раз. В зависимости от того, как структурирован ваш код, это может быть так просто, как просто не называть его где-то.
Но, допустим, у вас есть некоторые функции обертки, как это:
def add_to_csv(row):
with open('output.csv', 'a') as f:
dw = csv.DictWriter(f, ('name', 'age', 'tel'))
dw.writeheader()
dw.writerow(row)
И вы не можете изменить его, и вы хотите, чтобы написать заголовок, только если файл пуст.
Существует несколько разных способов определить, является ли файл пустым. Один раз один раз, учитывая, что у вас открыт файл в 'a'
, нужно просто проверить, что f.tell()
отличен от нуля. Или вы можете проверить, что os.fstat(f.fileno()).st_size
отличное от нуля.
Но если вы делаете все записи в течение одного запуска программы, вероятно, более чистым является просто отслеживать внутри скрипта. Опять же, вы можете переместить код open
и DictWriter
на экземпляр/глобальный уровень вместо локального метода function /. Или вы можете добавить флаг instance/global, который отслеживает, вы еще звонили writeheader
.
Я не знаю точно, что просит ОП, но это невозможно. У его двух диктонов есть точно такие же ключи, поэтому это всегда будет пустой набор. Плюс, он пытается написать 'dict2' в CSV-файл, поэтому писать только новые заголовки (если они есть) ничего полезного не сделают. – abarnert
да, я предполагаю, что вы ближе к тому, что хотел OP ... Я не очень хорошо понял вопрос, я думаю ... –
Я не уверен, что в этом есть достаточно, чтобы понять вопрос очень хорошо ... Я предполагаю, что он много нужно просить _something_ sensible, что имеет какое-то отношение к CSV-файлам и, вероятно, с 'DictWriter' ... но трудно получить дальше. – abarnert