如何在Python中自动生成字典并写入CSV文件
问题:如何从Python对象属性自动生成字典用于CSV写入?
Hey there! 看你的代码已经能正常工作了,但手动定义p_1到p_9再一个个拼字典确实有点繁琐,尤其是属性多的时候容易出错。刚好你已经把需要的属性名存在了objects列表里,咱们可以用Python的内置函数getattr()来动态生成目标字典,代码会简洁很多!
首先先修正一个小问题:你的objects列表里'childproc_count'和'cmdline'之间少了个逗号,会导致语法错误,正确的列表应该是:
objects=['childproc_count', 'cmdline', 'comms_ip', 'crossproc_count', 'filemod_count', 'filtering_known_dlls', 'group', 'host_type', 'id']
接下来就是核心的优化部分:把循环里手动生成字典的代码替换成动态遍历属性的方式。getattr(x, attr)的作用就是获取对象x中名为attr的属性值,和你写x.id、x.childproc_count是完全一样的效果,只不过是动态适配属性名的。
修改后的循环代码如下:
with open(my_path, 'w', newline='') as file: header = objects #add column headers writer = csv.DictWriter(file, fieldnames=header) writer.writeheader() for x in process_query: # 动态生成目标字典:遍历属性列表,自动获取对应属性值 # 如果有些属性不是字符串类型,需要转成字符串的话,就用str(getattr(x, attr)) dd = {attr: str(getattr(x, attr)) for attr in objects} #Write rows to csv file writer.writerow(dd)
这样一来,不管你后续要加多少个属性,只要把属性名加到objects列表里,代码就能自动生成对应的字典,完全不用手动一个个定义变量再拼字典了,非常适合你现在的需求!
内容的提问来源于stack exchange,提问作者Coder123
相关产品推荐
相关产品推荐

