首页 > 解决方案 > 使用python在csv中每一行的末尾附加字典或值列表

问题描述

我想在除标题之外的 csv 文件的每一行的末尾附加一个值列表。

我尝试过以下代码,但它会从 csv 文件中删除所有行,并且不会将任何值附加到 csv 文件中。

import tensorflow
from fer.fer import FER
import cv2
from os import listdir
from os.path import isfile, join
import numpy
import csv



f1 =     open("C:/Yasir/Thesis/4/FaceDetectionLatest/bin/Debug/Data/demoScoringData9.csv",   "a+")
reader = csv.reader(f1)
images = numpy.empty(len(onlyfiles), dtype=object)
for n in range(0, len(onlyfiles)):
    images[n] = cv2.imread( join(mypath,onlyfiles[n]) )
    # cv2.imshow(join(mypath,onlyfiles[n]),0)
    img = cv2.imread( join(mypath,onlyfiles[n]) )
    detector = FER()
    emotion = detector.detect_emotions(img)
    dict = emotion[0]
    emoList = dict['emotions']
    dict_writer = csv.DictWriter(f1, emoList)
    dict_writer.writerow(emoList)

我想将以下值附加到已创建的 csv 文件中。我的意思是 dict 值应该附加到 csv 的每一行,除了下面的标题值。

{“愤怒”:0.15,“厌恶”:0.0,“恐惧”:0.05,“快乐”:0.06,“悲伤”:0.24,“惊讶”:0.02,“中性”:0.49}

我还分享了我的 csv 文件截图

标签: pythoncsvappend

解决方案


这是将列附加到现有 CSV 的基本示例:

data.csv(原始)

col1,col2,col3
1,2,3
4,5,6
7,8,9

测试.py

import csv

with open('data.csv',newline='') as fin:
    r = csv.DictReader(fin)
    lines = list(r)

with open('data.csv','w',newline='') as fout:
    # Create writer with existing column headers plus new column headers
    w = csv.DictWriter(fout,fieldnames=r.fieldnames + 'angry disgust fear happy sad surprise neutral'.split())
    w.writeheader()

    for line in lines:
        emolist = {'angry': 0.15, 'disgust': 0.0, 'fear': 0.05, 'happy': 0.06, 'sad': 0.24, 'surprise': 0.02, 'neutral': 0.49}
        line.update(emolist)
        w.writerow(line)

data.csv(最终)

col1,col2,col3,angry,disgust,fear,happy,sad,surprise,neutral
1,2,3,0.15,0.0,0.05,0.06,0.24,0.02,0.49
4,5,6,0.15,0.0,0.05,0.06,0.24,0.02,0.49
7,8,9,0.15,0.0,0.05,0.06,0.24,0.02,0.49

推荐阅读