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对象的地方。 然而,我不断收到一个语法错误,没有任何意义..我甚至去正确的?
- 你在你的列表定义中缺less终止
]
。 - 你不能在列表中放置一个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 list
是True
– 那么[xA, xB] + xCall + [xD,]
就足够了。 -
c_list = [item for item in xCall]
是一个列表理解 ,它可以让你做一个列表,而不必写for
循环。列表parsing非常强大,非常优雅,您应该尽可能使用它们。 无论何时,如果您需要根据另一个列表创build列表,则可以通过一些标准筛选列表中的项目,或者同时对这两个项目进行筛选,列表理解可能是一个好的方法。
-
像
x
,A
,B
,C
,D
这样的单字母variables名称是非常糟糕的,因为它们没有提供关于variables包含的数据,types可能是什么,可能包含的值等信息。如果使用更多的描述性variables名称您可以。
在将其插入csv之前,您必须先创build数据。
在写操作之前,你可以得到所有的写入数据。
mydata = [xA,xB] mydata += [y for y in xCall] mydata.append(xD) # write mydata to the csv.
这样你将得到的数据,直接你可以写入CSV。