Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何自动创建字典以写入csv文件Python_Python_Python 3.x_Csv_Dictionary - Fatal编程技术网

如何自动创建字典以写入csv文件Python

如何自动创建字典以写入csv文件Python,python,python-3.x,csv,dictionary,Python,Python 3.x,Csv,Dictionary,我正在尝试使用Python3的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

我正在尝试使用Python3的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 }

下面是一个小示例,它创建了一对具有属性的对象,然后查询属性以写入文件

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

如果要将dict写入文件,可以使用pickle read up on并循环
头文件