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:
Ma sortie attendue est:
Je reçois la sortie dans un fichier sous la forme:
Mais le nom de la colonne est imprimé pour chaque ligne.
4 Réponses :
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>
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.
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]]
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)
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
`
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