连续不断地写入csv文件

时间:2018-06-24 17:04:59

标签: python csv

使用我的完整脚本,我将90家公司的推文与其关注者的推文以及其他公司的关注者的推文进行了比较。我正在尝试将所有结果写到一个csv文件中,但是我不确定如何循环执行。现在,代码中最重要的部分如下所示:

for x in tweets_companies:
    for y in tweets_followers:
        D1 = " ".join([tweets_companies[x]])
        D2 = " ".join([tweets_followers[y]])
        documents = [D1, D2]

        LemVectorizer.fit_transform(documents)
        tf_matrix = LemVectorizer.transform(documents)#.toarray()
        tfidfTran = TfidfTransformer(norm="l2")
        tfidfTran.fit(tf_matrix)

        print(x,y)
        tfidf_matrix = tfidfTran.transform(tf_matrix)
        cos_similarity_matrix = (tfidf_matrix * tfidf_matrix.T).toarray()

        print(cos_similarity_matrix)  

每次将公司的推文与自己的关注者或另一公司的关注者的推文进行比较时,就会得到以下结果:

company_a followers_b
[[1.        0.2745773]
 [0.2745773 1.       ]]

此循环一直在打印结果,直到将每个公司的推文与其他公司的追随者的推文进行比较为止。我正在尝试将所有结果写入一个csv文件,但是我不确定该循环如何工作。现在,我有以下内容:

  results = [x, y, cos_similarity_matrix]
  with open('results.csv', 'w') as csvfile:
      writer = csv.writer(csvfile)
      writer.writerow(['company', 'followers', 'result'])
      writer.writerow(results)  

我将其放置在第二个“ for”循环中,现在它仅将它在python中打印的最后结果写入csv文件。如何确保每次都使用新打印的结果更新csv文件,以便最终将每个公司的所有结果放入文件中?

2 个答案:

答案 0 :(得分:1)

放入

with open('results.csv', 'w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['company', 'followers', 'result'])

在循环外部(上方),并在循环内部调用writer.writerow。循环必须在with块内。

答案 1 :(得分:1)

您每次在第二个循环内打开文件。该文件始终具有相同的名称,并会覆盖前一个文件。移动

  with open('results.csv', 'w') as csvfile:
      writer = csv.writer(csvfile)

在外部循环之外,只需将行写入内部循环。