所以这是我正在使用的代码。当我打开tweetsentiment.csv文件时,推文全部打印在一行中。另外,我只是将所有其他行输出到此文件中。
streamedtweets = open('tweetdb', 'r')
outputfile = []
for row in streamedtweets:
stline = streamedtweets.readline() #do i need this?
processedStreamed = processTweet(stline)
streamedsentiment = NBClassifier.classify(extract_features(getFeatureVector(processedStreamed)))
outputfile.append((streamedsentiment, stline))
os.chdir(r'C:\Users\wildcat\Downloads\NLTK')
with open('tweetsentiment.csv', 'w', newline = '' ) as output:
os.chdir(r'C:\Users\wildcat\Downloads\NLTK')
a = csv.writer(output, delimiter = ',', lineterminator='\n',)
data = [outputfile]
a.writerow(data)
答案 0 :(得分:1)
由于writerow([outputfile])
写了一行,因此推文被打印成一行。相反,您可以使用writerows(outputfile)
方法。
示例:
outputfile = [("positive", "a tweet"), ("negative", "a tweet")]
output = open("tweetsentiment.cvs", 'w')
writer = csv.writer(output, delimiter = ',', lineterminator='\n',)
writer.writerows(outputfile)
这应该给你以下输出:
positive,a tweet
negative,a tweet
至于问题的第二部分。不,你不需要streamedtweets.readline()
。
实际上readline()
结合使用for循环是你跳过行的原因,因为它们都会向前移动文件指针。
答案 1 :(得分:0)
看起来问题在于阅读这些内容,您没有正确地执行此操作,请在完整代码中尝试此示例:
for stline in streamedtweets.readlines():
processedStreamed = processTweet(stline)
streamedsentiment = NBClassifier.classify(extract_features(getFeatureVector(processedStreamed)))
outputfile.append((streamedsentiment, stline))
os.chdir(r'C:\Users\wildcat\Downloads\NLTK')
这样你就不会在循环中混合readline,而是在每个循环中获得一行。