2
votes

the problem is output result is not save in csv file. I'm using this code to weight-age the words positive and negative.I want to save in the csv file.Firstly, read the csv file ,apply tf-idf and output display on shell,but error disply when result write in csv file.

for i, blob in enumerate(bloblist):
    print("Top words in document {}".format(i + 1))
    scores = {word: tfidf(word, blob, bloblist) for word in blob.words}
    sorted_words = sorted(scores.items(), reverse=True)
    print(sorted_words)
    final = open("tfidf.csv", "w").write(sorted_words)
    print(final)
    print("done")

The error is:

   Top words in document 1
   Traceback (most recent call last):
   File "C:\Python34\webcrawler-Final.py", line 38, in <module>
   final = open("tfidf.csv", "w").write(sorted_words)
   TypeError: must be str, not list
2
try final = open("tfidf.csv", "w").write(str(sorted_words)) - Avión
use open("tfidf.csv", "w").write(" ".join(sorted_words)), This would concatenate your list items and return a string, " ".join(['1', '2', '3']) would return 1 2 3 but if you want to write in the format of list then try @Borja method. - ZdaR
@Borja it works thanks but i want not to save paranthesis with data. e.g the ('Pakistan', 0.0), i want data save in this style i-e Pakistan ,0.0 - Anaya
Have you tried @ZdaR solution? - Avión
Oh @Anaya , Pakistan interesting ;) , you may try ", ".join(('India', 10.0)) which returns India ,10.0 and embedding this in your code: open("tfidf.csv", "w").write(", ".join(sorted_words)) - ZdaR

2 Answers

4
votes

Try to this.

sorted_words = ''.join(sorted(scores.items(), reverse=True))
1
votes

As you dont specify in your post, I dont know which is the separator between values of the tuple, so I added a '\n'. You can change that to ' ' or whatever you want.

final = open("tfidf.csv", "w").write('\n'.join('%s, %s' % x for x in sorted_words))