在csv文件中写字典

问题描述 投票:0回答:1

我想在执行代码期间将我在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)
python csv dictionary stop-words reader
1个回答
0
投票

您可能会发现使用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)
© www.soinside.com 2019 - 2024. All rights reserved.