How to not write the header to a CSV every time you update the file

Asked

Viewed 58 times

-1

When I create a CSV file with header, every time I try to insert new items the header repeats.

# Escrevendo o arquivo
with open('Gerador.csv', 'a', newline='', encoding='utf-8') as gravar:
    fieldnames = ['Instituição', 'Senha']
    escrever = csv.DictWriter(gravar, fieldnames=fieldnames)
    escrever.writeheader()

    nome = input('Instituição: ')
    senha = input('Senha: ')

    escrever.writerow({'Instituição': nome, 'Senha': senha})
  • You run the line escrever.writeheader() every time you write to the file. If you want to write only once, you need to see to run that line only when you create the file.

1 answer

3

An idea is to check if the file already existed (before opening it, since when opening with the option a, it will be created). Then you only write the header if it did not exist:

nome_arquivo = 'Gerador.csv'

# verifica se o arquivo existe

# Python >= 3.4
from pathlib import Path
arquivo_ja_existia = Path(nome_arquivo).is_file()

# Ou, para Python < 3.4
import os.path
arquivo_ja_existia = os.path.isfile(nome_arquivo)

import csv
# Escrevendo o arquivo
with open(nome_arquivo, 'a', newline='', encoding='utf-8') as gravar:
    fieldnames = ['Instituição', 'Senha']
    escrever = csv.DictWriter(gravar, fieldnames=fieldnames)
    if not arquivo_ja_existia: # só escreve o header se o arquivo não existia antes
        escrever.writeheader()
   
    nome = input('Instituição: ')
    senha = input('Senha: ')
    escrever.writerow({'Instituição': nome, 'Senha': senha})

To check if the file already exists, I put two options:

  1. for Python >= 3.4 can be used module pathlib
  2. for versions prior to 3.4 can be used module os.path

Next, you only write the header if the file did not exist.


Another option is to check the position of the file we are in. If the file is new, it will be at zero, and only in this case I write the header:

import csv
# Escrevendo o arquivo
with open(nome_arquivo, 'a', newline='', encoding='utf-8') as gravar:
    fieldnames = ['Instituição', 'Senha']
    escrever = csv.DictWriter(gravar, fieldnames=fieldnames)
    if gravar.tell() == 0: # só escreve o header se estiver no início do arquivo
        escrever.writeheader()
   
    nome = input('Instituição: ')
    senha = input('Senha: ')
    escrever.writerow({'Instituição': nome, 'Senha': senha})
  • 1

    Well that the object gravar could have a flag indicating whether the file is new or not xD

Browser other questions tagged

You are not signed in. Login or sign up in order to post.