【问题标题】:Writing a list value horizontally using csv.DictWriter使用 csv.DictWriter 水平写入列表值
【发布时间】:2019-01-23 22:38:25
【问题描述】:

我有一个要写入 CSV 文件的字典。但是,dict中的某些键有一个值列表,我想将列表的每个元素水平写入一个单独的单元格中。

data = {"Age": 28, "Name": "Some Name", "Aliases": ["alias1", "alias2"]}
fieldnames = ['Age', 'Name', 'Aliases']

with open(f, 'a') as o:
    writer = csv.DictWriter(o, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow(data)

别名在预期的单个单元格中以数组形式写入。我将列表转换为逗号分隔的字符串data["Aliases"] = ', '.join(data['Aliases']),但这个逗号分隔的字符串也被写入同一个单元格。

关于如何将列表中的每个元素写入单独的单元格的任何想法。

【问题讨论】:

  • 当您加入列表时,您正在创建写入单个单元格的单个字符串参数。与其使用DictWriter,不如读取每个字典值并在它不是列表时将其写入,然后在找到列表项时对其进行处理。

标签: python csv


【解决方案1】:

CSV 文件有分隔符,而不是单元格

这是一个小而重要的观点。您所说的“单元格”大概是您在 Excel 中打开 CSV 文件时看到的内容。逗号分隔符和用于分隔分隔符字段中的引号对于读取 CSV 文件的程序具有特殊含义。

csv.DictWriter 适用于结构化数据,即每行每个字段一个值。您的数据本质上是非结构化的。如果您希望每一行具有任意长度,您可以通过csv.writer 实现此目的:

import csv

data = {"Age": 28, "Name": "Some Name", "Aliases": ["alias1", "alias2"]}
fieldnames = ['Age', 'Name', 'Aliases']

with open('file.csv', 'w', newline='') as fout:
    writer = csv.writer(fout)
    writer.writerow(fieldnames)
    writer.writerow([data['Age'], data['Name'], *data['Aliases']])

结果file.csv:

Age,Name,Aliases
28,Some Name,alias1,alias2

【讨论】:

    猜你喜欢
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 2022-01-22
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多