如何用Python生成垂直结构的CSV文件?
解决CSV生成超大文件问题并实现目标格式
嘿,我来帮你搞定这个问题!你之前的代码之所以生成1GB的超大文件,主要是两个逻辑错误在搞鬼,咱们一步步来修正:
问题出在哪?
- 循环内重复写入:你把
writeheader()和writerow()放在了for i in cycle_with_signal_change的循环里,这意味着每遍历一个字典的键,就会重复写一次表头和整份数据。哪怕数据本身很小,重复次数多了文件也会疯狂膨胀。 - 用错了Writer类型:
csv.DictWriter是用来把字典的键作为表头、值作为对应列内容的,但你的需求是把每个字典键放在第一列,对应的值拆分成后面的三列,这个工具并不适配你的场景。
正确的实现代码
咱们换用普通的csv.writer来实现你要的格式,代码如下:
import csv # 你的原始字典数据 cycle_with_signal_change = {"v1": ["v11", "v12", "v13"], "v2": ["v21", "v22", "v23"], "v3": ["v31", "v32", "v33"]} with open("cyclesAndSignalChange.csv", 'w', newline='', encoding='utf-8') as csvfile: # 创建普通csv写入器,指定分隔符为空格 wr = csv.writer(csvfile, delimiter=' ') # 先写入表头行 wr.writerow(["A", "B", "C", "D"]) # 遍历字典的每个键值对,逐行写入 for key, values in cycle_with_signal_change.items(): # 把键和对应的三个值拼接成一行数据 wr.writerow([key] + values)
代码说明
- 用
'w'模式而非'wb':在Python3中写入文本文件推荐用'w',加上newline=''可以避免Windows系统下生成多余的空行。 - 先写表头再写数据:表头只需要写一次,然后遍历字典的每个键值对,把键作为第一列,对应列表的三个元素作为后面三列,刚好符合你要的格式。
- 避免重复写入:把写入操作放在循环外(表头)和循环内(逐行数据),确保每一行数据只写一次,不会重复堆积。
这样生成的文件就会是你想要的结构,大小也会和实际数据匹配啦~
内容的提问来源于stack exchange,提问作者MagikarpSama
相关产品推荐
相关产品推荐

