gpt4 book ai didi

python - Django CSV Export..在列表中迭代

转载 作者:行者123 更新时间:2023-11-30 23:45:57 24 4
gpt4 key购买 nike

我正在查看 django 文档,了解如何将数据导出到 CSV 文件,以便将其导入到 Excel 中。到目前为止,我已经可以正常工作了,但我在弄清楚如何导出模型中的多对多字段时遇到了一些麻烦。

到目前为止我已经

writer = csv.writer(response)
writer.writerow(['A','B', 'C', 'D'])

for x in case_log_list:
writer.writerow([x.A,
x.B,
for y in x.C.all:
y,
x.D)

其中 [list] 内的 for 循环是我尝试迭代该字段中的 ManyToMany 对象的地方。然而我不断收到一个没有任何意义的语法错误..我是否正确地处理了这个问题?

最佳答案

  1. 您的列表定义中缺少终止 ]
  2. 不能将 for 循环放入列表中。

x.C 是某种列表或序列吗?您是否打算将 x.C 的每一项写入 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 x.C.all] # turn x.C into a list
output_list = [x.A, x.B] + c_list + [x.D,] # assemble list
writer.writerow( output_list )

或者如果您想简短一点:

for x in case_log_list:
writer.writerow ( [x.A, x.B] + [item for item in x.C.all] + [x.D,] )

注释:

  • 如果 x.C.all 已经是一个列表 - 也就是说,如果 type(x.C.all) is listTrue - 那么[x.A, x.B] + x.C.all + [x.D,] 就足够了。

  • c_list = [item for item in x.C.all] 是一个列表理解,它允许您对列表执行操作,而无需编写 for 循环。

    列表推导式非常强大、非常优雅,您应该在任何有意义的地方使用它们。任何时候您需要根据另一个列表创建一个列表,按某些条件过滤列表中的项目,或同时两者,列表理解可能是一个好方法。

  • 单字母变量名称,例如 xABCD 确实很糟糕,因为它们没有提供有关变量保存哪些数据、其类型可能是什么、它可能包含哪些值等信息。如果可以的话,请使用更具描述性的变量名称。

    <

关于python - Django CSV Export..在列表中迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9307227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com