4

我有以下代码运行良好,但我无法在数据文件中修剪和存储数据:

import nltk

tweets = [
    (['love', 'this', 'car']),
    (['this', 'view', 'amazing']),
    (['not', 'looking', 'forward', 'the', 'concert'])
    ]

def get_words_in_tweets(tweets):
    all_words = []
    for (words) in tweets:
      all_words.extend(words)
    return all_words

def get_word_features(wordlist):
    wordlist = nltk.FreqDist(wordlist)
    word_features = wordlist.keys()
    return word_features

output = open('wordFeatures.csv','w')

word_features = get_word_features(get_words_in_tweets(tweets))

print (word_features)
output.write(word_features)
#print (wordlist)
output.close()

它的作用是检查单词是双倍还是三倍等,并且只在列表中添加一个单词。输出如下所示:

['this', 'amazing', 'car', 'concert', 'forward', 'looking', 'love', 'not', 'the', 'view']

现在你可以看到我试图将这些数据保存在一个文本文件中,但我得到了一个

TypeError: expected a character buffer object

我想要以下格式的文本文件中的数组数据:

1:this
2:amazing
3:car 
4:concert
5:forward
...

所以每个单词都有一行,整数递增。

有人知道如何以这种方式保存我的数据吗?

4

3 回答 3

2

错误的原因是output.write接受一个字符串,而不是一个list. word_features是一个list

要将列表写入文件,您需要对其进行迭代:

for feature in word_features: 
    output.write("{0}\n".format(feature))

我不明白你需要的格式,因为carconcert在同一行。我假设这是一个错字,您实际上需要将它们放在单独的行上。然后你可以这样做以获得该输出:

for nfeature in enumerate(word_features):
    output.write("{0}:{1}\n".format(nfeature[0] + 1, nfeature[1]))
于 2013-09-15T14:56:44.310 回答
1

您正在尝试将列表对象写入文件,但它需要一个字符串。您可以在此处使用 `enumerate:

word_features = get_word_features(get_words_in_tweets(tweets))
with open('wordFeatures.csv', 'w') as output:
    for ind, item in enumerate(word_features, 1):
        output.write("{}:{}\n".format(ind, item))

或使用csv模块:

import csv
word_features = get_word_features(get_words_in_tweets(tweets))
with open('wordFeatures.csv', 'w') as output:
    writer = csv.writer(output, delimiter=':')
    writer.writerows(enumerate(word_features, 1))

输出:

1:this
2:amazing
3:car
4:concert
5:forward
6:looking
7:love
8:not
9:the
10:view
于 2013-09-15T15:56:21.953 回答
0

在 Python 中,我将数据保存到 csv 文件中,但采用了一种相当黑客的方式:

首先,我将数据保存到文本文件中。在每一行中,我用逗号分隔每个“列元素”。

然后,当我完成该行 [当前只是文本文件中的一行] 时,我写入一个新行并开始写入下一行数据。根据需要重复。

然后,当我完成后,我将文本文件重命名为 csv 文件。

对你来说,加上递增的整数,你可以组成一个增量计数器。如果你像我一样做,你可以增加你的计数器,将值写入文本文件,写入逗号,写入数据,然后写入新行,然后重复。完成后请记住将文件重命名为 csv 文件。

就像我说的那样,这是一种黑客方式,但无论如何。我愿意听取更好的方法。

于 2013-09-15T14:55:18.760 回答