如何将Python字典按列格式写入CSV文件?
实现字典按列格式写入CSV的方法
这个需求核心是把字典的键作为CSV的列名,对应的值列表按行纵向填充,短列表的后续行自动补空。下面是两种可靠的实现方式:
方法一:使用Python内置csv模块(推荐)
csv模块会自动处理分隔符转义、数据类型转换等问题,是最安全的方式:
import csv # 你的原始字典 items = {'people': ['Peter', 'Danny'], 'numbers': [1,2,3,4], 'cities': ['London']} # 获取列名(Python 3.7+字典默认保持插入顺序,若需指定顺序可手动定义,比如columns = ['people', 'numbers', 'cities']) columns = list(items.keys()) # 计算最长列表的长度,确定需要生成多少行 max_row_count = max(len(values) for values in items.values()) # 写入CSV文件 with open('output.csv', 'w', newline='', encoding='utf-8') as csv_file: writer = csv.writer(csv_file) # 先写入表头行 writer.writerow(columns) # 逐行生成数据 for row_index in range(max_row_count): # 构建当前行的每个元素:存在则取对应值,不存在则填空字符串 current_row = [ items[col][row_index] if row_index < len(items[col]) else '' for col in columns ] writer.writerow(current_row)
关键细节说明:
- 如果你的Python版本低于3.7,字典是无序的,需要手动指定列顺序(比如
columns = ['people', 'numbers', 'cities'])。 newline=''参数是为了避免Windows系统下写入时出现多余的空行。- 当元素包含逗号、引号等特殊字符时,
csv.writer会自动用引号包裹该元素,保证CSV格式的正确性。
方法二:手动拼接字符串(不推荐,仅作参考)
如果不想用csv模块,可以手动拼接每行内容,但需要自己处理类型转换和特殊字符:
items = {'people': ['Peter', 'Danny'], 'numbers': [1,2,3,4], 'cities': ['London']} columns = list(items.keys()) max_row_count = max(len(v) for v in items.values()) with open('output_manual.csv', 'w', encoding='utf-8') as txt_file: # 写入表头 txt_file.write(','.join(columns) + '\n') # 逐行生成数据 for row_index in range(max_row_count): row_elements = [] for col in columns: if row_index < len(items[col]): # 把所有元素转成字符串,避免数字类型拼接报错 row_elements.append(str(items[col][row_index])) else: row_elements.append('') # 拼接成一行并写入 txt_file.write(','.join(row_elements) + '\n')
注意事项:
这种方法的缺点是如果元素包含逗号、双引号等字符,会破坏CSV格式,所以仅适用于数据非常简单的场景。
内容的提问来源于stack exchange,提问作者Dalvtor
相关产品推荐
相关产品推荐

