如何让Python csv.writer/writerows写入同一行单元格而非换行
Python CSV写入:如何将内容写入同一行的相邻单元格
问题根源分析
你的代码存在两个核心问题,导致输出不符合预期:
writerow()参数错误:csv.writer的writerow()方法接收可迭代对象(如列表),如果直接传入拼接好的字符串,会把字符串拆成单个字符作为独立单元格,这就是表头被拆成U,R,L,...的原因。- 多次调用
writerow()拆分单行内容:你先单独写入URL一行,再循环写入每个分数一行,自然每个内容都会单独占一行。正确逻辑应该是把同一行的所有内容(URL+所有分数)整理成一个列表,一次性写入。
修正后的完整代码
import csv import json filename = 'test1.csv' json_files = ["1.json", "2.json", "3.json"] # 替换为你的实际JSON文件列表 with open(filename, mode="w", newline='', encoding='utf-8') as file: writer = csv.writer(file) # 写入表头 with open('1.json', 'r', encoding='utf-8') as f: data = json.load(f) categories = list(data['categories'].keys()) # 用列表生成表头,避免字符拆分 header = ["URL"] + categories writer.writerow(header) # 处理每个JSON文件,生成单行数据 for file_path in json_files: with open(file_path, 'r', encoding='utf-8') as f: data = json.load(f) # 收集当前行的所有内容:URL + 对应分类的分数 row = [url] # 替换为你的实际URL变量 for category in categories: score = data['categories'][category]['score'] row.append(score) # 一次性写入整行,所有值自动进入相邻单元格 writer.writerow(row)
关键修改说明
- 表头生成:不再拼接字符串,而是用
["URL"] + categories生成列表,writerow()会自动将列表每个元素写入相邻单元格。 - 单行内容收集:处理每个JSON文件时,先将URL放入列表,再循环追加所有分数,最后一次性调用
writerow(),保证整行内容在同一行的不同单元格。 - 缩进修正:修复原代码中缩进错误的问题,确保文件操作和循环逻辑正确执行。
newline=''参数:避免Windows系统下写入CSV时出现多余空行。
修正后输出会完全匹配你的期望格式:URL和对应分数在同一行,每个值占据相邻单元格。
内容的提问来源于stack exchange,提问作者Actor
相关产品推荐
相关产品推荐

