在写入CSV文件时,我的数据全部打印在一行上

时间:2015-11-08 21:34:22

标签: python csv

所以这是我正在使用的代码。当我打开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)

2 个答案:

答案 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,而是在每个循环中获得一行。