2017-04-30 3 views
1

Ich habe einen großen Datensatz, der in der zweiten Spalte Satz und ihren Emotionsstatus hat. Ich habe Code entwickelt, um sie als numpy Array zu lesen. Dann, was ich brauche, ist, wenn die Emotion eines Satzes neutral ist, dann als wahr zurückkehren und wenn nicht, false zurückkehren. Jedes Ergebnis, das von der Bedingung if sonst zurückgegeben wird, sollte in eine CSV-Datei schreiben. Aber hier wird das Ergebnis nur einmal in die CSV-Datei geschrieben, anstatt alle Ergebnisse zu schreiben, die von jeder Iteration der for-Schleife zurückgegeben werden. Das Folgende ist der Code, den ich bisher habe.Einen String-Wert in Python in eine CSV-Datei schreiben

import csv 
import numpy as np 

with open('Book1.csv', encoding='utf8') as csvfile: 
reader = csv.DictReader(csvfile) 

for row in reader: 
    text=(row['text']) 
    emotion=(row['emotion']) 
    my_list=(text, emotion) 
    my_array = np.asarray(my_list) 

    make_array = (text, "neutral") 
    num_array = np.asarray(make_array) 

    if np.array_equal(my_array,num_array): 

     with open('test.csv', 'w') as csvfile: 
      fieldnames = ['result'] 
      writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 

      writer.writeheader() 
      writer.writerow({'result': 'True'}) 

    else: 

     with open('test.csv', 'w') as csvfile: 
      fieldnames = ['result'] 
      writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 

      writer.writeheader() 
      writer.writerow({'result': 'False'})` 

ich könnte irgendwo falsch sein. Jemand bitte hilf mir.

+1

'open ('test.csv', 'w')' überschreibt die Datei bei jedem Aufruf. Sie müssen entweder im Append-Modus 'open ('test.csv', 'a')' öffnen, oder besser noch, öffnen Sie es nur einmal vor der Schleife. Außerdem sollte der Code unter 'with open ('Book1.csv', encoding = 'utf8') als csvfile:' um eine Ebene eingerückt werden. – Craig

+1

oh wow, für jede Zeile in book1.csv öffnen, schreiben und schließen Sie test.csv. Können Sie nicht zuerst ein Wörterbuch mit den erforderlichen Datensätzen erstellen und schließlich schreiben? – Pushkr

+0

Irgendwann möchte ich True und False Wert zählen. Wenn es einen anderen Weg gibt als den, dem ich folge. Erzähl es mir bitte. –

Antwort

2

Sie sollten die Datei für anfügen anstelle schreiben, wenn ich das Problem richtig verstehe.

with open('test.csv', 'a') as csvfile: 
    fieldnames = ['result'] 
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 

    writer.writeheader() 
    writer.writerow({'result': 'True'}) 

Außerdem wiederholen Sie Code in den If/Else-bedingten Blöcken; Sie sollten eine Variable result_dict erstellen, die gleich {'result': 'True'} oder {'result': 'False'} ist und dann außerhalb der if/else-Blöcke schreiben, damit Sie die Datei nicht in der bedingte Blöcke. Lass es mich wissen, wenn das nicht klar ist.

+0

Ich habe versucht, für Ihren Code. Der Spaltenname wird auch wiederholt geschrieben. Wie kann ich es reparieren? –

+0

Ja bitte. Ich bin nicht klar, was du gesagt hast. Lass mich wissen, wie es geht. –

+0

Was meinen Sie mit dem Spaltennamen hier? –

Verwandte Themen