代码之家  ›  专栏  ›  技术社区  ›  kklw

将数据对象列表转换为csv

  •  8
  • kklw  · 技术社区  · 8 年前

    我正在使用python 2.7.6。我想将对象列表转换为csv格式。我有一个cdr对象列表,这个对象包含一些字符串、int和datatime对象。

    class cdr():
        def __init__(self):
            # some init
    
        def __iter__(self):
            return iter(self.name, self.my_value,self.my_datetime)
    
    #from another class
    import csv
    def make_csv(self, cdr_list):
        with open(self.file_name, 'wb') as csv_file:
            wr = csv.writer(csv_file, delimiter=",")
            for cdr in cdr_list:
                wr.writerow(cdr)
    

    但我得到了一个空白的csv。谢谢你的帮助。

    1 回复  |  直到 8 年前
        1
  •  19
  •   slackmart    8 年前

    iter 内置函数需要一个集合作为参数,所以以列表形式传递属性。然后使用@Shankar建议。

    class Cdr():
    
        def __iter__(self):
            return iter([self.name, self.my_value, self.my_datetime])
    
    
    #from another class
    with open(self.file_name, 'wb') as csv_file:
        wr = csv.writer(csv_file, delimiter=',')
        for cdr in cdr_list:
            wr.writerow(list(cdr))  # @Shankar suggestion
    

    来自python帮助文档:

    iter(…)
    iter(集合)->迭代器
    iter(可调用,sentinel)->迭代器
    从对象获取迭代器。在第一种形式中,参数必须 提供它自己的迭代器,或者是一个序列。
    在第二种形式中,调用callable,直到它返回sentinel。