【问题标题】:How to automatically create a dictionary to write to csv file-Python如何自动创建字典以写入 csv 文件-Python
【发布时间】:2020-06-29 15:28:19
【问题描述】:

我正在尝试使用 Python 3 的 csv 编写器将数据导出到 csv 文件中。我需要一种从对象及其各自属性中自动创建字典的方法。

这是我的代码:

#Import the appropriate models and functions needed for our script
from cbapi.response import *
import logging 
import csv 

#Connect to our CB Server
conn = CbResponseAPI() 

#Sample Query
q = "ipAddress:000.00.0.0"

#Initial our query
process_query = conn.select(Process).where(q).group_by("id")

#Set your path 
my_path='/Users/path/tt_123.csv'
    
#all object properties for event 
objects=['childproc_count'
   'cmdline',
   'comms_ip',
   'crossproc_count',
   'filemod_count',
   'filtering_known_dlls',
   'group',
   'host_type',
   'id']

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:
        p_1 = '{}'.format(x.id)
        p_2 = '{}'.format(x.childproc_count)
        p_3 = '{}'.format(x.cmdline)
        p_4 = '{}'.format(x.comms_ip)
        p_5 = '{}'.format(x.crossproc_count)
        p_6 = '{}'.format(x.filemod_count)
        p_7 = '{}'.format(x.filtering_known_dlls)
        p_8 = '{}'.format(x.group)
        p_9 = '{}'.format(x.host_type)
           
# Put them in a dictionary to write to csv file
        dd={'id': p_1, 'child':p_2 , 'cmdline':p_3}

#Write rows to csv file
        writer.writerow(dd)

它是这样工作的,但是有没有办法自动将所有 p_(p_1、p_2 等)放入字典中,就像它在变量 dd 中显示的那样?我是 python 新手,任何事情都会有所帮助。

所以,本质上 dd 将是:

dd={'id': p_1, 'child':p_2 , 'cmdline':p_3, 'comms_ip':p_4, 'crossproc_count':p_5, 'filemod_count':p_6, 'filtering_known_dlls':p_7, 'group':p_8, 'host_type':p_9 }

【问题讨论】:

  • 如果要将dict写入文件,可以使用pickle
  • 阅读getattr 并循环header

标签: python python-3.x csv dictionary


【解决方案1】:

这是一个小例子,它创建了几个具有属性的对象,然后查询属性以写入文件。

import csv

class MyObject:
    def __init__(self,id,cmd,p1,p2,p3):
        self.id = id
        self.cmdline = cmd
        self.param1 = p1
        self.param2 = p2
        self.param3 = p3

objects = [MyObject(111,'string','param 1','param 2',123),
           MyObject(222,'string2','param 1','param 2',456)]

headers = 'id cmdline param1 param2 param3'.split()

with open('output.csv', 'w', newline='') as file:
    writer = csv.DictWriter(file, fieldnames=headers)
    writer.writeheader()

    for obj in objects:
        # "dictionary comprehension" to build the key/value pairs
        row = {item:getattr(obj,item) for item in headers}
        writer.writerow(row)

输出:

id,cmdline,param1,param2,param3
111,string,param 1,param 2,123
222,string2,param 1,param 2,456

【讨论】:

    猜你喜欢
    • 2021-03-25
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    相关资源
    最近更新 更多