Django的CSV导出..在列表中迭代

我正在浏览如何将我的数据导出到CSV文件的django文档,以便它可以导入到Excel中。 到目前为止,我得到它的工作,但即时通讯有点麻烦搞清楚如何我可以导出我的模型ManyToMany领域。

到目前为止,我有

writer = csv.writer(response) writer.writerow(['A','B', 'C', 'D']) for x in case_log_list: writer.writerow([xA, xB, for y in xCall: y, xD) 

[list]里面的for循环是我试图遍历该字段中的ManyToMany对象的地方。 然而,我不断收到一个语法错误,没有任何意义..我甚至去正确的?

  1. 你在你的列表定义中缺less终止]
  2. 你不能在列表中放置一个for循环。

xC是某种列表或序列? 您是否打算将每个xC项目作为CSV中的单独字段进行编写?

我相信你打算使用列表连接运算符+ ,它将两个列表粘合到一个列表中。 像这样使用它:

 >>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> a + b [1, 2, 3, 4, 5, 6] 

你的例子变成:

 for x in case_log_list: c_list = [item for item in xCall] # turn xC into a list output_list = [xA, xB] + c_list + [xD,] # assemble list writer.writerow( output_list ) 

或者,如果你想简短:

 for x in case_log_list: writer.writerow ( [xA, xB] + [item for item in xCall] + [xD,] ) 

笔记:

  • 如果xCall已经是一个列表 – 也就是说,如果type(xCall) is listTrue – 那么[xA, xB] + xCall + [xD,]就足够了。

  • c_list = [item for item in xCall]是一个列表理解 ,它可以让你做一个列表,而不必写for循环。

    列表parsing非常强大,非常优雅,您应该尽可能使用它们。 无论何时,如果您需要根据另一个列表创build列表,则可以通过一些标准筛选列表中的项目,或者同时对这两个项目进行筛选,列表理解可能是一个好的方法。

  • xABCD这样的单字母variables名称是非常糟糕的,因为它们没有提供关于variables包含的数据,types可能是什么,可能包含的值等信息。如果使用更多的描述性variables名称您可以。

在将其插入csv之前,您必须先创build数据。

在写操作之前,你可以得到所有的写入数据。

 mydata = [xA,xB] mydata += [y for y in xCall] mydata.append(xD) # write mydata to the csv. 

这样你将得到的数据,直接你可以写入CSV。