【发布时间】:2015-06-08 07:04:02
【问题描述】:
csv.Dictwriter 被实例化为:
class csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)
fieldsnames 是一个键序列,或者在我的例子中是一个字典。
这是我的问题;在用某个 dict 实例化 DictWriter 之后,我希望在调用 writerow() 之前删除 fieldnames 的一些键(以及扩展的值)。由于我不会进入的原因,我只能告诉代码在实例化DictWriter 之后要删除哪些键。 Dict 只有 3 种方法:
writerheader
writerow
writerows
.. 这些都没有任何帮助。根据我的测试,似乎DictWriter被实例化时,它根据fieldnames设置了csv-to-be的列名。实例化后对fieldnames 所做的任何更改都不会影响将生成的列标题。因为 DictWriter 在实例化时定义了列,所以我是否坚持这些?或者有没有办法解决这个问题?
【问题讨论】:
-
我认为您可以使用 csv.writer 并遍历所有行进行写入,以便在写入之前完全控制每一行及其值。
-
@VikasNehaOjha 但是由于每一行都必须具有与其他行相同的键(列名),所以控制每一行如何满足我的目的?我希望摆脱列本身,无论任何给定行的列值如何。
-
您能告诉我们您是如何构建要迭代的数据的吗?这意味着,如何在代码中编写行结构。我假设它是一个字典列表并发布答案。
-
@VikasNehaOjha 我无法编辑我的帖子。要写入 CSV 的数据的结构与您在此处看到的非常相似:gist.github.com/Pyderman/2263d6887b9963d3d1ca 在第 297 行和第 306 行之间,我希望删除一些列,即我知道它们的键匹配值的那些列某个字符串。它们不是为电子邮件标题中的字段创建的列。相反,它们是我在第 297 行实例化 DictWriter 之前创建的。
标签: python list csv dictionary instantiation