Python CSV写对象

时间:2016-04-07 13:26:16

标签: python csv

我有一个名为TwitterObject的类,它存储两个变量(post,sentiment)。我想以下列格式将此数据输出到CSV:

post,sentiment
'This is a twitter post', 'pos'
'This is another twitter post', 'neg'

非常感谢任何帮助。

谢谢!

def OutputCSV(csv_file):
    csv_columns = ['post','sentiment']
    with open(csv_file, 'w') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
        writer.writeheader()
        for TwitterObject.TwitterObject in ApplicationModel.ApplicationModel.getTwitterObjects():
            writer.writerow(str(TwitterObject.TwitterObject.post))

Twitter对象

class TwitterObject(object):

    def __init__(self, post, sentiment):

        self.post = post
        self.sentiment = sentiment

这是我得到的错误:

ValueError: dict contains fields not in fieldnames: 'R', 'T', ' ', '@', 'O', 'l', 'i', 'P', 'r', 'i', 'c', 'e', 'B', 'a', 't', 'e', 's', ':', ' ', 'G', 'r', 'a', 'n',

4 个答案:

答案 0 :(得分:1)

谢谢你heinst&弗朗西斯科指出我的写作方向。使用你的代码,我得到了这样的工作:

@staticmethod
    def OutputCSV(csv_file):
        csv_columns = ['post','sentiment']
        with open(csv_file, 'w') as csvfile:
            writer = csv.writer(csvfile)
            writer.writerow(csv_columns)
            for TwitterObject.TwitterObject in ApplicationModel.ApplicationModel.getTwitterObjects():
                writer.writerow({
                    TwitterObject.TwitterObject.post,
                    TwitterObject.TwitterObject.sentiment
                })

答案 1 :(得分:0)

writer.writerow需要一个序列,并且你给它一个字符串,这就是为什么每个字母都是一个单独的字段。尝试类似:

writer.writerow({'post': str(TwitterObject.TwitterObject.post), 'sent': str(TwitterObject.TwitterObject. sentiment)})

答案 2 :(得分:0)

您已选择使用DictWriter,因此writerow方法接受dict作为参数。

您应该使用类似

的内容更改writerow
writer.writerow({
    'post': TwitterObject.TwitterObject.post,
    'sentiment': TwitterObject.TwitterObject.sentiment
    })

答案 3 :(得分:-1)

python有一个csv编写器库:

import csv
with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                        quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])