在Python中将字符串值写入CSV文件

在Python中将字符串值写入CSV文件,python,csv,numpy,Python,Csv,Numpy,我有一个很大的数据集,在第二列有句子和他们的情绪状态。我已经开发了将它们作为numpy数组读取的代码。然后我需要的是,如果一个句子的情感是中性的,那么返回为真,如果不是,返回为假。if-else条件返回的每个结果都应写入CSV文件。但在这里,它将只在CSV文件中写入一次结果,而不是写入for循环每次迭代返回的所有结果。以下是我到目前为止的代码 import csv import numpy as np with open('Book1.csv', encoding='utf8') as csv

我有一个很大的数据集,在第二列有句子和他们的情绪状态。我已经开发了将它们作为numpy数组读取的代码。然后我需要的是,如果一个句子的情感是中性的,那么返回为真,如果不是,返回为假。if-else条件返回的每个结果都应写入CSV文件。但在这里,它将只在CSV文件中写入一次结果,而不是写入for循环每次迭代返回的所有结果。以下是我到目前为止的代码

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'})`

我可能在某个地方错了。有人请帮帮我。

如果我正确理解问题,你应该打开文件进行附加而不是写入

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

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

此外,在if/else条件块中重复代码;您应该创建一个变量
result_dict
,该变量等于{'result':'True'}或{'result':'False'},然后将其写入if/else块之外,这样您就不必在条件块中打开文件。如果不清楚,请告诉我。

open('test.csv','w')
每次调用时都会覆盖该文件。您需要以追加模式
open('test.csv','a')
打开,或者最好在循环之前只打开一次。另外,将open('Book1.csv',encoding='utf8')作为csvfile:的
下的代码应该缩进一级。哇,对于Book1.csv中的每一行,您都在打开、写入和关闭test.csv。你能不能先编一本所需记录的字典,最后再写一次….?不管怎样,最后我想计算真值和假值。如果有其他方法,而不是我遵循的方法。请告诉我,我试过你的密码。列名也会重复写入。我怎么修?好的。我不清楚你说了什么。让我知道怎么做。这里的列名是什么意思?我的意思是fieldnames=['result']在for循环中使用一个计数器,看看你是在0还是>0。如果大于0,则无需写入标头,否则写入标头。