0
votes

Écrire des données dans un fichier CSV avec le nom de la colonne à l'aide de python

J'utilise le code python ci-dessous pour écrire des données dans un fichier CSV avec un nom de colonne.

def get_filename_datetime():
    # Use current date to get a text file name.
    return "Report-" + str(datetime.date.today())
# Get full path for writing.
filename = get_filename_datetime()
Data = [["FirstName", "LastName","Failed_User_Id"],
          [firstname, lastname, faileduserid]]
Reportfilename = os.path.join(reportspath, filename)
myfile = open(Reportfilename + '-Results.csv', "a+")
with myfile:
    writer = csv.writer(myfile)
    writer.writerows(Data)

Je reçois une sortie dans un fichier sous la forme:

résultat réel

Ma sortie attendue est:

Je reçois la sortie dans un fichier sous la forme:

 sortie attendue

Mais le nom de la colonne est imprimé pour chaque ligne.


1 commentaires

pouvez-vous s'il vous plaît donner le code complet et la sortie avec une capture d'écran de la structure de la table


4 Réponses :


0
votes

C'est parce qu'ils sont dans la liste Data:

Data = [[firstname, lastname, faileduserid]]

il suffit de les supprimer:

Data = [["FirstName", "LastName","Failed_User_Id"],
                      [firstname, lastname, faileduserid]]

Exemples d'écriture de l'en-tête ici .

p>


2 commentaires

mais je dois donner un nom de colonne à chaque colonne


Il suffit de l'écrire une fois avant la boucle, voir le lien que j'ai fourni.



0
votes

Je suppose que vous utilisez la méthode get_filename_datetime en boucle, vous continuez donc à ajouter ceci au fichier CSV:

 Data = [[firstname, lastname, faileduserid]]

La solution consiste à déplacer le nom de la colonne à l'extérieur de boucle, n'ajoutez que les données de ligne:

Data = [["FirstName", "LastName","Failed_User_Id"],
                      [firstname, lastname, faileduserid]]


0 commentaires

0
votes

Vous obtenez les en-têtes répétés car chaque fois que vous ajoutez une ligne, vous ajoutez à nouveau les en-têtes Vous devez séparer la première ligne dans Data et l'écrire une fois

def get_filename_datetime():
    # Use current date to get a text file name.
    return "Report-" + str(datetime.date.today())
# Get full path for writing.
filename = get_filename_datetime()
headers = ["FirstName", "LastName","Failed_User_Id"]     
Data = [firstname, lastname, faileduserid]
Reportfilename = os.path.join(reportspath, filename)
myfile = open(Reportfilename + '-Results.csv', "a+")
with myfile:
   writer = csv.writer(myfile)
   if(os.stat(myfile).st_size == 0):
      writer.writerows(header) 
    writer.writerows(Data)


0 commentaires

0
votes

Les deux réponses de @mtdot et @schoon sont correctes

Si vous voulez utiliser des pandas

vous pouvez utiliser ceci

`
columns = ['FirstName', 'LastName', 'Failed_User_Id']
header = True
for dataset in datasets:
    df = pd.DataFrame(dataset)
    df = df[columns]
    mode = 'a+'
    df.to_csv('./new.csv', encoding='utf-8', mode=mode, header=header, index=False)
    header = False
`


0 commentaires