假设我有一个名为obj的对象,它被初始化并有50个成员变量。我想将此写入csv文件中的一行,而不必键入对象的每个成员变量。我想避免的漫长的啰嗦方式是:
writerPosts.writerow([obj.var1, obj.var2, obj.var3 .........................])
我想做一些看起来像这样的事情,并取得同样的结果:
writerPosts.writerow(obj)
如何做到这一点?
答案 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