使用python写入csv中的特定单元格

时间:2013-10-20 07:50:11

标签: python csv cell

我在一个文本文件中有一组句子,我将其中的动词标记为csv文件中的列标题。如果该句子中存在动词,我需要在右栏下的特定单元格中标记“1”。 e.g。

如果我的判决是:我喜欢这部电影。

我的csv文件有标题:喜欢,讨厌和讨厌。

然后我需要我的csv文件看起来像

  like       hate       loathe
   1

提前致谢。

这是我尝试过的代码:

with open('verb.csv', 'wb') as csvn:
    cwriter = csv.writer(csvn)
    cwriter.writerow([d for d in verbs])

其中动词是我的动词列表。这会将动词打印为csv文件中的列标题。

for l, label in file:
    t = nltk.word_tokenize(l)
    tt = nltk.pos_tag(t)
    for pos in tt:
        for p in pos[1]:
            c = 0
            if(p == 'V'):
                w = pos[0]
                for l in verbs:
                    if w == l:
                        print(c)
                        continue
                    else:
                        c+=1

现在w包含动词,我可以在动词列表中搜索匹配的单词并获取其位置,但我不知道如何将csv文件中的相应位置标记为1.我的python版本是2.7。

2 个答案:

答案 0 :(得分:0)

在处理代码时,我建议使用增量步骤。让某些部件工作,然后在其余部分进行构建。例如,根据我们在此处看到的内容,当您尝试读入file时,第一行应该存在值错误,除非已经csv或其他内容解析过。

在实际向其中写入任何内容之前,您还应该生成要放入结果文件的所有输出。建立一个字典,我相信会有效,结果然后最后以你想要的格式写出来。您无法真正返回并将字符任意写入文件的某些列。你可以附加,但最好只是建立输出并在最后完成。

目前尚不清楚每个句子是否需要一行,或者总计还是什么?如果没有单词,或者每列中都为零,则为空行?

您的目标是熟悉nltk,还是获得所需的输出?

似乎只测试一个单词是in列表会更有效率。 (if w in verbs将比嵌套循环更有效。)

您还在循环中更改l的值。使用其他名称。

当你写出标题时,你不需要打破列表并用列表理解再次组装它。如果动词已经是一个列表,cwriter.writerow(verbs)应该没问题。

这里有太多问题需要解决,所以我会重复一遍:宝贝步骤。在尝试写出整个代码块之前,一次使用一个功能...使用大量print语句来查看正在加载的值。

祝你好运!

答案 1 :(得分:0)

我会在您创建计数器后创建一个空列表。该列表与n个动词的长度相同。

c = 0
emptylist = [""] * len(verbs)

然后当你浏览动词列表时,使用计数器(c)(顺便说一下,你确定它不是你想在代码中打印(l)吗?)作为空列表中的位置。我要改变以下部分:

if w == l:
    print(c)
    emptylist[c] = 1
    ## then write emptylist to the csv with csv.writerow(emtptylist)
    continue