如何正确将RabbitMQ队列CSV输出保存为文件(Python)
解决RabbitMQ CSV输出写入文件时字符间加逗号的问题
问题原因
你遇到的问题是因为csv.writer的writerow()方法接受可迭代对象(比如列表),如果直接传入完整的CSV字符串,它会把每个字符当作单独的元素,自然就会在每个字符间插入逗号。
正确解决方案
方法一:直接写入原始CSV输出(推荐)
既然rabbitmqctl已经直接输出标准的CSV格式内容,完全不需要通过csv模块二次处理,直接把输出写入文件即可,简单高效:
import subprocess # 执行rabbitmqctl命令获取CSV格式的队列信息 cmd_result = subprocess.run( ['rabbitmqctl', 'list_queues', '--formatter', 'csv'], capture_output=True, text=True, check=True # 命令执行失败时自动抛出异常 ) # 将原始CSV内容写入文件 with open('rabbitmq_queues.csv', 'w', encoding='utf-8') as f: f.write(cmd_result.stdout)
方法二:用csv模块逐行处理(适合需要额外修改字段的场景)
如果需要对输出的字段做修改,再用csv.writer处理,但要先把每行拆成字段列表:
import subprocess import csv cmd_result = subprocess.run( ['rabbitmqctl', 'list_queues', '--formatter', 'csv'], capture_output=True, text=True, check=True ) # 拆分输出为行,过滤空行 csv_lines = [line for line in cmd_result.stdout.splitlines() if line.strip()] with open('rabbitmq_queues.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) for line in csv_lines: # 注意:如果字段包含逗号(rabbitmqctl会用引号包裹),split(',')会错误拆分字段,此时更推荐方法一 writer.writerow(line.split(','))
提示:如果队列名称或其他字段包含逗号,
rabbitmqctl的CSV输出会用双引号包裹该字段,这种场景下用split(',')会破坏字段结构,方法一绝对是最优选择。
内容的提问来源于stack exchange,提问作者Su Fani
相关产品推荐
相关产品推荐

