在csv文件中写字典

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在csv文件中写字典相关的知识,希望对你有一定的参考价值。

我想在执行代码期间将我在Python脚本中创建的所有词典中的值添加到CSV文件中,这样最后我会得到类似这样的内容:

文件开头:

id;Verbatim;score
15;je suis monter à la boulangerie;4
44;tu es méchant;5
45;je te hais et la foret enchanté est belle de milles faux et les jeunes filles sont assises au bor de la mer;7
47;je ne comprends pas la vie et je suis perdue, aide moi stp maman je suis perdue tu es ma seule amie et je t'aime;8

最后的csv文件:(对于简单的方法;我想在现有文件中添加此列)

id;Verbatim;score;**d_tag;d_lemma;d_filtered_words**
15;Je suis monter à , la boulangerie;4;['Je\tPRO:PER\tje', 'suis\tVER:pres\tsuivre|être', 'monter\tVER:infi\tmonter', 'à\tPRP\tà', ',\tPUN\t,', 'la\tDET:ART\tle', 'boulangerie\tNOM\tboulangerie'];['je', 'suivre|être', 'monter', 'à', ',', 'le', 'boulangerie'];['monter', 'boulangerie']
44;Tu es ? méchant;5;['Tu\tPRO:PER\ttu', 'es\tVER:pres\têtre', '?\tSENT\t?', 'méchant\tNOM\tméchant'];['tu', 'être', '?', 'méchant'];['être', 'méchant']
45;Je te hais et la Foret enchantée est belle de milles faux et les jeunes filles sont assises au bor de la mer;7;['Je\tPRO:PER\tje', 'te\tPRO:PER\tte', 'hais\tVER:pres\thaïr', 'et\tKON\tet', 'la\tDET:ART\tle', 'Foret\tNAM\tForet', 'enchantée\tVER:pper\tenchanter', 'est\tVER:pres\têtre', 'belle\tADJ\tbeau', 'de\tPRP\tde', 'milles\tNOM\tmille', 'faux\tADJ\tfaux', 'et\tKON\tet', 'les\tDET:ART\tle', 'jeunes\tADJ\tjeune', 'filles\tNOM\tfille', 'sont\tVER:pres\têtre', 'assises\tVER:pper\tasseoir', 'au\tPRP:det\tau', 'bor\tNOM\tbor', 'de\tPRP\tde', 'la\tDET:ART\tle', 'mer\tNOM\tmer'];['je', 'te', 'haïr', 'et', 'le', 'Foret', 'enchanter', 'être', 'beau', 'de', 'mille', 'faux', 'et', 'le', 'jeune', 'fille', 'être', 'asseoir', 'au', 'bor', 'de', 'le', 'mer'];['haïr', 'Foret', 'enchanter', 'être', 'beau', 'mille', 'faux', 'jeune', 'fille', 'être', 'asseoir', 'bor', 'mer']
47;Je ne Comprends pas la vie et je ? suis perdue aide moi stp maman je suis perdue tu es ma seule amie et je t'aime;8;['Je\tPRO:PER\tje', 'ne\tADV\tne', 'Comprends\tVER:pres\tcomprendre', 'pas\tADV\tpas', 'la\tDET:ART\tle', 'vie\tNOM\tvie', 'et\tKON\tet', 'je\tPRO:PER\tje', '?\tSENT\t?', 'suis\tVER:pres\tsuivre|être', 'perdue\tVER:pper\tperdre', 'aide\tNOM\taide', 'moi\tPRO:PER\tmoi', 'stp\tVER:simp\tstp', 'maman\tNOM\tmaman', 'je\tPRO:PER\tje', 'suis\tVER:pres\tsuivre|être', 'perdue\tVER:pper\tperdre', 'tu\tPRO:PER\ttu', 'es\tVER:pres\têtre', 'ma\tDET:POS\tmon', 'seule\tADJ\tseul', 'amie\tNOM\tami', 'et\tKON\tet', 'je\tPRO:PER\tje', ""t'\tPRO:PER\tte"", 'aime\tVER:pres\taimer'];['je', 'ne', 'comprendre', 'pas', 'le', 'vie', 'et', 'je', '?', 'suivre|être', 'perdre', 'aide', 'moi', 'stp', 'maman', 'je', 'suivre|être', 'perdre', 'tu', 'être', 'mon', 'seul', 'ami', 'et', 'je', 'te', 'aimer'];['comprendre', 'vie', 'perdre', 'aide', 'stp', 'maman', 'perdre', 'être', 'seul', 'ami', 'aimer']

完整代码:

# -*- coding: UTF-8 -*-
import codecs 
import re
import os
import sys, argparse
import subprocess
import pprint
import csv
from itertools import islice
import pickle
import nltk
from nltk import tokenize
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.corpus import stopwords

try:
    import treetaggerwrapper
    from treetaggerwrapper import TreeTagger, make_tags
    print("import TreeTagger OK")
except:
    print("Import TreeTagger pas Ok")

from itertools import islice
from collections import defaultdict

#export le lexique de sentiments
pickle_in = open("dict_pickle", "rb")
dico_lexique = pickle.load(pickle_in)

# extraction colonne verbatim
d = 

with open(sys.argv[1], 'r', encoding='utf-8') as csv_file:
    csv_file.readline()
    for line in csv_file:
        token = line.split(';')
        try:
            d[token[0]] = token[1]
        except:
            print(line)
print(d)

tagger = treetaggerwrapper.TreeTagger(TAGLANG='fr')
d_tag = 
for key, val in d.items(): 
        newvalues = tagger.tag_text(val)
        d_tag[key] = newvalues
#print(d_tag)

#lemma dictionary
d_lemma = defaultdict(list)

for k, v in d_tag.items():
    for p in v:
        parts = p.split('\t')
        try:
            d_lemma[k].append(parts[2])
        except:
            print(parts)
print(d_lemma)                          

#filtered words
stopWords = set(stopwords.words('french'))
d_filtered_words = defaultdict(list)

d_filtered_words = k: [w for w in l if w not in stopWords and w.isalpha()] for k, l in d_lemma.items()
print(d_filtered_words)

#writing tags in the dictionary 
with open("sortie.csv", "w") as output:
    writer = csv.DictWriter(output, "w")
    for k, v in d_tag.items():
        writer.writerow(k)
        writer.writerow(v)
答案

您可能会发现使用csv.reader()csv.writer()更容易读取和写入您的文件。首先将文件读入rows,这将是行的列表。这种方法意味着没有必要跟踪id作为大词典中的关键。相反,行一次处理一行。

接下来从每行(verbatim)获取第二个元素并计算您的标签,引理和过滤的单词。如您所希望以列表样式编写,请使用str()将每个列表转换为字符串。然后可以将这三个列表添加到现有row的末尾(使用extend()),然后将其写入输出文件:

import csv

# Read the CSV file into a list of lists
with open(sys.argv[1], 'r', encoding='utf-8', newline='') as f_input:
    csv_input = csv.reader(f_input, delimiter=';')
    header = next(csv_input)
    rows = list(csv_input)

# Create the output CSV file
with open('sortie.csv', 'w', encoding='utf-8', newline='') as f_output:
    csv_output = csv.writer(f_output, delimiter=';')
    header.extend(['d_tag', 'd_lemma', 'd_filtered_words'])
    csv_output.writerow(header)

    # Process the data, one row at a time
    for row in rows:
        if row:  # skip empty rows
            verbatim = row[1]

            # Calculate d_tag, d_lemma, d_filtered_words
            tags = ['a\tb\tc', 'd\te\tf']
            lemmas = ['1\t2\t3', '4\t5\t6']
            filtered_words = ['u\tv\tw\t', 'x\ty\tz']

            row.extend([str(tags), str(lemmas), str(filtered_words)])
            csv_output.writerow(row)

以上是关于在csv文件中写字典的主要内容,如果未能解决你的问题,请参考以下文章

写字典到 iPhone 上的 plist

打开CSV格式文件时的数字自动转换和乱码问题~~~~急

Python 怎么在csv文件中加入一列数据

从R中的csv文件中删除多余的行,然后合并csv文件

在R语言 中如何把list对象逐行写入csv文件中

如何创建csv文件