如何将对象成员变量的值写入csv行?

时间:2017-11-05 01:21:47

标签: python file csv object

假设我有一个名为obj的对象,它被初始化并有50个成员变量。我想将此写入csv文件中的一行,而不必键入对象的每个成员变量。我想避免的漫长的啰嗦方式是:

writerPosts.writerow([obj.var1, obj.var2, obj.var3 .........................]) 

我想做一些看起来像这样的事情,并取得同样的结果:

writerPosts.writerow(obj)

如何做到这一点?

2 个答案:

答案 0 :(得分:1)

获取所有类字段/变量的一种方法如下:

members = [attr for attr in dir(obj) if not callable(getattr(obj, attr)) and not attr.startswith("__")]

这里的成员是所有可能变量的list。上面的列表理解过滤掉任何可调用的属性(意味着类的任何可能的功能)和任何内置函数。

然后将它们写入csv文件很简单。

with open("output.csv",'wb') as resultFile:
    wr = csv.writer(resultFile, dialect='excel')
    wr.writerows(members)

这会将那些变量(而不是值)写入csv文件。

编辑: 如果要编写变量值,则可以执行以下操作:

values = [getattr(obj, member) for member in members]

values列表的每个类字段都有。 然后,您可以将此列表写入csv文件,如上所述。

答案 1 :(得分:0)

我假设你有很多这些对象,并写一个小例子。 vars()可用于获取类实例的成员变量:

import csv

class Class:
    def __init__(self,a,b,c,d,e):
        self.var1 = a
        self.var2 = b
        self.var3 = c
        self.var4 = d
        self.var5 = e

# Create a few objects with different member values...
L = [Class(1,2,3,4,5),Class(2,3,4,5,6),Class(3,4,5,6,7)]

with open('out.csv','w',newline='') as f:

    # fieldnames lists the headers for the csv.
    w = csv.DictWriter(f,fieldnames=sorted(vars(L[0])))
    w.writeheader()

    for obj in L:
        # Build a dictionary of the member names and values...
        w.writerow({k:getattr(obj,k) for k in vars(x)})

输出:

var1,var2,var3,var4,var5
1,2,3,4,5
2,3,4,5,6
3,4,5,6,7