2017-08-17 1 views
-1

Je dois créer un fichier et écrire son contenu d'en-tête avant la boucle for. Si je le fais dans la boucle, le contenu de l'en-tête se répète à chaque itération de la boucle. Lorsque j'exécute le code ci-dessous, j'obtiens l'erreur "opération d'E/S sur un fichier fermé".Ecriture et lecture dans un fichier csv - erreur d'opération d'E/S

Est-ce que vous vous demandez s'il y a un problème pour ce problème? Toute suggestion serait appréciée. TIA !!

csv_filename = "testfile4.csv" 
    with open(csv_filename, "wt") as csvfile: 
     writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) 

     # CSV Header 
     header = ["Post ID", "Permalink", "Create Time"] 
     writer.writerow(header) 

    for group in getGroups(): 
     feed = getValues(group["id"], group["name"]) 
     with open(csv_filename, "a") as csvfile: 
      for item in feed: 
       row = [item["id"], item["permalink_url"], item["created_time"]] 
       writer.writerow(row) 
+1

Déplacez votre entière boucle 'for' un tiret plus profond. –

+0

Qu'avez-vous essayé jusqu'à présent? avez-vous essayé de supprimer l'un des blocs "avec"? avez-vous essayé de fermer le fichier entre l'ouverture? – xyious

+1

N'ouvrez pas le fichier une seconde fois en mode "a", ce qui est totalement inutile. Faites simplement tout à l'intérieur du premier bloc 'with'. –

Répondre

0

Vous pouvez traiter toutes les opérations nécessaires à simple déclaration with

csv_filename = "testfile4.csv" 
with open(csv_filename, "wt") as csvfile: 
    writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) 
    header = ["Post ID", "Permalink", "Create Time"] 
    writer.writerow(header) 
    for group in getGroups(): 
     feed = getValues(group["id"], group["name"]) 
     for item in feed: 
      row = [item["id"], item["permalink_url"], item["created_time"]] 
      writer.writerow(row)